File: /usr/include/assert.h

Green shading in the line number column means the source is part of the translation unit, red means it is conditionally excluded. Highlighted line numbers link to the translation unit page. Highlighted macros link to the macro page.

       1: /*-
       2:  * Copyright (c) 1992, 1993
       3:  *    The Regents of the University of California.  All rights reserved.
       4:  * (c) UNIX System Laboratories, Inc.
       5:  * All or some portions of this file are derived from material licensed
       6:  * to the University of California by American Telephone and Telegraph
       7:  * Co. or Unix System Laboratories, Inc. and are reproduced herein with
       8:  * the permission of UNIX System Laboratories, Inc.
       9:  *
      10:  * Redistribution and use in source and binary forms, with or without
      11:  * modification, are permitted provided that the following conditions
      12:  * are met:
      13:  * 1. Redistributions of source code must retain the above copyright
      14:  *    notice, this list of conditions and the following disclaimer.
      15:  * 2. Redistributions in binary form must reproduce the above copyright
      16:  *    notice, this list of conditions and the following disclaimer in the
      17:  *    documentation and/or other materials provided with the distribution.
      18:  * 3. All advertising materials mentioning features or use of this software
      19:  *    must display the following acknowledgement:
      20:  *    This product includes software developed by the University of
      21:  *    California, Berkeley and its contributors.
      22:  * 4. Neither the name of the University nor the names of its contributors
      23:  *    may be used to endorse or promote products derived from this software
      24:  *    without specific prior written permission.
      25:  *
      26:  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
      27:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
      28:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
      29:  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
      30:  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
      31:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
      32:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
      33:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
      34:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
      35:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
      36:  * SUCH DAMAGE.
      37:  *
      38:  *    @(#)assert.h    8.2 (Berkeley) 1/21/94
      39:  * $FreeBSD: src/include/assert.h,v 1.4 2002/03/23 17:24:53 imp Exp $
      40:  */
      41: 
      42: #include <sys/cdefs.h>
      43: #ifdef __cplusplus
      44: #include <stdlib.h>
      45: #endif /* __cplusplus */
      46: 
      47: /*
      48:  * Unlike other ANSI header files, <assert.h> may usefully be included
      49:  * multiple times, with and without NDEBUG defined.
      50:  */
      51: 
      52: #undef assert
      53: #undef __assert
      54: 
      55: #ifdef NDEBUG
      56: #define    assert(e)    ((void)0)
      57: #else
      58: 
      59: #ifndef __GNUC__
      60: 
      61: __BEGIN_DECLS
      62: #ifndef __cplusplus
      63: void abort(void) __dead2;
      64: #endif /* !__cplusplus */
      65: int  printf(const char * __restrict, ...);
      66: __END_DECLS
      67: 
      68: #define assert(e)  \
      69:     ((void) ((e) ? ((void)0) : __assert (#e, __FILE__, __LINE__)))
      70: #define __assert(e, file, line) \
      71:     ((void)printf ("%s:%u: failed assertion `%s'\n", file, line, e), abort())
      72: 
      73: #else /* __GNUC__ */
      74: 
      75: __BEGIN_DECLS
      76: void __assert_rtn(const char *, const char *, int, const char *) __dead2;
      77: #if defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && ((__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__-0) < 1070)
      78: void __eprintf(const char *, const char *, unsigned, const char *) __dead2;
      79: #endif
      80: __END_DECLS
      81: 
      82: #if defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && ((__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__-0) < 1070)
      83: #define __assert(e, file, line) \
      84:     __eprintf ("%s:%u: failed assertion `%s'\n", file, line, e)
      85: #else
      86: /* 8462256: modified __assert_rtn() replaces deprecated __eprintf() */
      87: #define __assert(e, file, line) \
      88:     __assert_rtn ((const char *)-1L, file, line, e)
      89: #endif
      90: 
      91: #if __DARWIN_UNIX03
      92: #define    assert(e) \
      93:     (__builtin_expect(!(e), 0) ? __assert_rtn(__func__, __FILE__, __LINE__, #e) : (void)0)
      94: #else /* !__DARWIN_UNIX03 */
      95: #define assert(e)  \
      96:     (__builtin_expect(!(e), 0) ? __assert (#e, __FILE__, __LINE__) : (void)0)
      97: #endif /* __DARWIN_UNIX03 */
      98: 
      99: #endif /* __GNUC__ */
     100: #endif /* NDEBUG */
     101: 
     102: #ifndef _ASSERT_H_
     103: #define _ASSERT_H_
     104: 
     105: #ifndef __cplusplus
     106: #if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L
     107: #define static_assert _Static_assert
     108: #endif /* __STDC_VERSION__ */
     109: #endif /* !__cplusplus */
     110: 
     111: #endif /* _ASSERT_H_ */
     112: