xref: /minix3/include/assert.h (revision f14fb602092e015ff630df58e17c2a9cd57d29b3)
1*f14fb602SLionel Sambuc /*	$NetBSD: assert.h,v 1.21 2011/08/26 01:10:49 joerg Exp $	*/
22fe8fb19SBen Gras 
32fe8fb19SBen Gras /*-
42fe8fb19SBen Gras  * Copyright (c) 1992, 1993
52fe8fb19SBen Gras  *	The Regents of the University of California.  All rights reserved.
62fe8fb19SBen Gras  * (c) UNIX System Laboratories, Inc.
72fe8fb19SBen Gras  * All or some portions of this file are derived from material licensed
82fe8fb19SBen Gras  * to the University of California by American Telephone and Telegraph
92fe8fb19SBen Gras  * Co. or Unix System Laboratories, Inc. and are reproduced herein with
102fe8fb19SBen Gras  * the permission of UNIX System Laboratories, Inc.
119865aeaaSBen Gras  *
122fe8fb19SBen Gras  * Redistribution and use in source and binary forms, with or without
132fe8fb19SBen Gras  * modification, are permitted provided that the following conditions
142fe8fb19SBen Gras  * are met:
152fe8fb19SBen Gras  * 1. Redistributions of source code must retain the above copyright
162fe8fb19SBen Gras  *    notice, this list of conditions and the following disclaimer.
172fe8fb19SBen Gras  * 2. Redistributions in binary form must reproduce the above copyright
182fe8fb19SBen Gras  *    notice, this list of conditions and the following disclaimer in the
192fe8fb19SBen Gras  *    documentation and/or other materials provided with the distribution.
202fe8fb19SBen Gras  * 3. Neither the name of the University nor the names of its contributors
212fe8fb19SBen Gras  *    may be used to endorse or promote products derived from this software
222fe8fb19SBen Gras  *    without specific prior written permission.
239865aeaaSBen Gras  *
242fe8fb19SBen Gras  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
252fe8fb19SBen Gras  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
262fe8fb19SBen Gras  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
272fe8fb19SBen Gras  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
282fe8fb19SBen Gras  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
292fe8fb19SBen Gras  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
302fe8fb19SBen Gras  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
312fe8fb19SBen Gras  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
322fe8fb19SBen Gras  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
332fe8fb19SBen Gras  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
342fe8fb19SBen Gras  * SUCH DAMAGE.
359865aeaaSBen Gras  *
362fe8fb19SBen Gras  *	@(#)assert.h	8.2 (Berkeley) 1/21/94
379865aeaaSBen Gras  */
389865aeaaSBen Gras 
392fe8fb19SBen Gras /*
402fe8fb19SBen Gras  * Unlike other ANSI header files, <assert.h> may usefully be included
412fe8fb19SBen Gras  * multiple times, with and without NDEBUG defined.
422fe8fb19SBen Gras  */
432fe8fb19SBen Gras 
442fe8fb19SBen Gras #include <sys/cdefs.h>
452fe8fb19SBen Gras #include <sys/featuretest.h>
462fe8fb19SBen Gras #include <sys/null.h>
472fe8fb19SBen Gras 
489865aeaaSBen Gras #undef assert
499865aeaaSBen Gras 
509865aeaaSBen Gras #ifdef NDEBUG
512fe8fb19SBen Gras # ifndef __lint__
522fe8fb19SBen Gras #  define assert(e)	(__static_cast(void,0))
532fe8fb19SBen Gras # else /* !__lint__ */
542fe8fb19SBen Gras #  define assert(e)
552fe8fb19SBen Gras # endif /* __lint__ */
562fe8fb19SBen Gras #else /* !NDEBUG */
572fe8fb19SBen Gras # if __STDC__
582fe8fb19SBen Gras #  define assert(e)							\
592fe8fb19SBen Gras 	((e) ? __static_cast(void,0) : __assert13(__FILE__, __LINE__,	\
602fe8fb19SBen Gras 	                                          __assert_function__, #e))
612fe8fb19SBen Gras # else	/* PCC */
622fe8fb19SBen Gras #  define assert(e)							\
632fe8fb19SBen Gras 	((e) ? __static_cast(void,0) : __assert13(__FILE__, __LINE__,	\
642fe8fb19SBen Gras 	                                          __assert_function__, "e"))
652fe8fb19SBen Gras # endif /* !__STDC__ */
662fe8fb19SBen Gras #endif /* NDEBUG */
679865aeaaSBen Gras 
682fe8fb19SBen Gras #undef _DIAGASSERT
692fe8fb19SBen Gras #if !defined(_DIAGNOSTIC)
702fe8fb19SBen Gras # if !defined(__lint__)
712fe8fb19SBen Gras #  define _DIAGASSERT(e) (__static_cast(void,0))
722fe8fb19SBen Gras # else /* !__lint__ */
732fe8fb19SBen Gras #  define _DIAGASSERT(e)
742fe8fb19SBen Gras # endif /* __lint__ */
752fe8fb19SBen Gras #else /* _DIAGNOSTIC */
762fe8fb19SBen Gras # if __STDC__
772fe8fb19SBen Gras #  define _DIAGASSERT(e)						\
782fe8fb19SBen Gras 	((e) ? __static_cast(void,0) : __diagassert13(__FILE__, __LINE__, \
792fe8fb19SBen Gras 	                                              __assert_function__, #e))
802fe8fb19SBen Gras # else	/* !__STDC__ */
812fe8fb19SBen Gras #  define _DIAGASSERT(e)	 					\
822fe8fb19SBen Gras 	((e) ? __static_cast(void,0) : __diagassert13(__FILE__, __LINE__, \
832fe8fb19SBen Gras 	                                              __assert_function__, "e"))
849865aeaaSBen Gras # endif
852fe8fb19SBen Gras #endif /* _DIAGNOSTIC */
862fe8fb19SBen Gras 
872fe8fb19SBen Gras 
882fe8fb19SBen Gras #if defined(__lint__)
892fe8fb19SBen Gras #define	__assert_function__	(__static_cast(const void *,0))
902fe8fb19SBen Gras #elif defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
912fe8fb19SBen Gras #define	__assert_function__	__func__
922fe8fb19SBen Gras #elif __GNUC_PREREQ__(2, 6)
932fe8fb19SBen Gras #define	__assert_function__	__PRETTY_FUNCTION__
942fe8fb19SBen Gras #else
952fe8fb19SBen Gras #define	__assert_function__	(__static_cast(const void *,0))
962fe8fb19SBen Gras #endif
972fe8fb19SBen Gras 
982fe8fb19SBen Gras #ifndef __ASSERT_DECLARED
992fe8fb19SBen Gras #define __ASSERT_DECLARED
1002fe8fb19SBen Gras __BEGIN_DECLS
101*f14fb602SLionel Sambuc __dead void __assert(const char *, int, const char *);
102*f14fb602SLionel Sambuc __dead void __assert13(const char *, int, const char *, const char *);
1032fe8fb19SBen Gras void __diagassert(const char *, int, const char *);
1042fe8fb19SBen Gras void __diagassert13(const char *, int, const char *, const char *);
1052fe8fb19SBen Gras __END_DECLS
1062fe8fb19SBen Gras #endif /* __ASSERT_DECLARED */
107