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