stevel@tonic-gate | 7c478bd | 2005-06-14 00:00:00 -0700 | [diff] [blame] | 1 | /* |
| 2 | * CDDL HEADER START |
| 3 | * |
| 4 | * The contents of this file are subject to the terms of the |
| 5 | * Common Development and Distribution License, Version 1.0 only |
| 6 | * (the "License"). You may not use this file except in compliance |
| 7 | * with the License. |
| 8 | * |
| 9 | * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE |
| 10 | * or http://www.opensolaris.org/os/licensing. |
| 11 | * See the License for the specific language governing permissions |
| 12 | * and limitations under the License. |
| 13 | * |
| 14 | * When distributing Covered Code, include this CDDL HEADER in each |
| 15 | * file and include the License file at usr/src/OPENSOLARIS.LICENSE. |
| 16 | * If applicable, add the following below this CDDL HEADER, with the |
| 17 | * fields enclosed by brackets "[]" replaced with your own identifying |
| 18 | * information: Portions Copyright [yyyy] [name of copyright owner] |
| 19 | * |
| 20 | * CDDL HEADER END |
| 21 | */ |
| 22 | /* Copyright (c) 1988 AT&T */ |
Marcel Telka | b4203d7 | 2017-06-14 08:51:35 +0200 | [diff] [blame] | 23 | /* All Rights Reserved */ |
stevel@tonic-gate | 7c478bd | 2005-06-14 00:00:00 -0700 | [diff] [blame] | 24 | |
stevel@tonic-gate | 7c478bd | 2005-06-14 00:00:00 -0700 | [diff] [blame] | 25 | /* |
Garrett D'Amore | ba3594b | 2014-08-02 18:23:32 -0700 | [diff] [blame] | 26 | * Copyright 2014 Garrett D'Amore <garrett@damore.org> |
Robert Mustacchi | fc2512c | 2016-03-28 19:43:25 -0700 | [diff] [blame] | 27 | * Copyright 2016 Joyent, Inc. |
Andy Fiddaman | 8dc6d85 | 2018-05-09 14:39:57 +0000 | [diff] [blame] | 28 | * Copyright 2018 OmniOS Community Edition (OmniOSce) Association. |
Garrett D'Amore | ba3594b | 2014-08-02 18:23:32 -0700 | [diff] [blame] | 29 | * |
stevel@tonic-gate | 7c478bd | 2005-06-14 00:00:00 -0700 | [diff] [blame] | 30 | * Copyright 2004 Sun Microsystems, Inc. All rights reserved. |
| 31 | * Use is subject to license terms. |
| 32 | */ |
| 33 | |
| 34 | #ifndef _ASSERT_H |
| 35 | #define _ASSERT_H |
| 36 | |
stevel@tonic-gate | 7c478bd | 2005-06-14 00:00:00 -0700 | [diff] [blame] | 37 | #ifdef __cplusplus |
| 38 | extern "C" { |
| 39 | #endif |
| 40 | |
stevel@tonic-gate | 7c478bd | 2005-06-14 00:00:00 -0700 | [diff] [blame] | 41 | #if __STDC_VERSION__ - 0 >= 199901L |
| 42 | extern void __assert_c99(const char *, const char *, int, const char *); |
| 43 | #else |
| 44 | extern void __assert(const char *, const char *, int); |
| 45 | #endif /* __STDC_VERSION__ - 0 >= 199901L */ |
stevel@tonic-gate | 7c478bd | 2005-06-14 00:00:00 -0700 | [diff] [blame] | 46 | |
Robert Mustacchi | fc2512c | 2016-03-28 19:43:25 -0700 | [diff] [blame] | 47 | /* |
| 48 | * In C11 the static_assert macro is always defined, unlike the assert macro. |
| 49 | */ |
Andy Fiddaman | 8dc6d85 | 2018-05-09 14:39:57 +0000 | [diff] [blame] | 50 | #if __STDC_VERSION__ - 0 >= 201112L && !defined(__cplusplus) |
Robert Mustacchi | fc2512c | 2016-03-28 19:43:25 -0700 | [diff] [blame] | 51 | #define static_assert _Static_assert |
Andy Fiddaman | 8dc6d85 | 2018-05-09 14:39:57 +0000 | [diff] [blame] | 52 | #endif /* __STDC_VERSION - 0 >= 201112L && !defined(__cplusplus) */ |
Robert Mustacchi | fc2512c | 2016-03-28 19:43:25 -0700 | [diff] [blame] | 53 | |
stevel@tonic-gate | 7c478bd | 2005-06-14 00:00:00 -0700 | [diff] [blame] | 54 | #ifdef __cplusplus |
| 55 | } |
| 56 | #endif |
| 57 | |
| 58 | #endif /* _ASSERT_H */ |
| 59 | |
| 60 | /* |
| 61 | * Note that the ANSI C Standard requires all headers to be idempotent except |
| 62 | * <assert.h> which is explicitly required not to be idempotent (section 4.1.2). |
| 63 | * Therefore, it is by intent that the header guards (#ifndef _ASSERT_H) do |
| 64 | * not span this entire file. |
| 65 | */ |
| 66 | |
| 67 | #undef assert |
| 68 | |
| 69 | #ifdef NDEBUG |
| 70 | |
| 71 | #define assert(EX) ((void)0) |
| 72 | |
| 73 | #else |
| 74 | |
stevel@tonic-gate | 7c478bd | 2005-06-14 00:00:00 -0700 | [diff] [blame] | 75 | #if __STDC_VERSION__ - 0 >= 199901L |
| 76 | #define assert(EX) (void)((EX) || \ |
| 77 | (__assert_c99(#EX, __FILE__, __LINE__, __func__), 0)) |
| 78 | #else |
| 79 | #define assert(EX) (void)((EX) || (__assert(#EX, __FILE__, __LINE__), 0)) |
| 80 | #endif /* __STDC_VERSION__ - 0 >= 199901L */ |
stevel@tonic-gate | 7c478bd | 2005-06-14 00:00:00 -0700 | [diff] [blame] | 81 | |
| 82 | #endif /* NDEBUG */ |