blob: d2c2e154a27bb848fc69ba4e54c93f1750a3ab30 [file] [log] [blame]
stevel@tonic-gate7c478bd2005-06-14 00:00:00 -07001/*
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 Telkab4203d72017-06-14 08:51:35 +020023/* All Rights Reserved */
stevel@tonic-gate7c478bd2005-06-14 00:00:00 -070024
stevel@tonic-gate7c478bd2005-06-14 00:00:00 -070025/*
Garrett D'Amoreba3594b2014-08-02 18:23:32 -070026 * Copyright 2014 Garrett D'Amore <garrett@damore.org>
Robert Mustacchifc2512c2016-03-28 19:43:25 -070027 * Copyright 2016 Joyent, Inc.
Andy Fiddaman8dc6d852018-05-09 14:39:57 +000028 * Copyright 2018 OmniOS Community Edition (OmniOSce) Association.
Garrett D'Amoreba3594b2014-08-02 18:23:32 -070029 *
stevel@tonic-gate7c478bd2005-06-14 00:00:00 -070030 * 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-gate7c478bd2005-06-14 00:00:00 -070037#ifdef __cplusplus
38extern "C" {
39#endif
40
stevel@tonic-gate7c478bd2005-06-14 00:00:00 -070041#if __STDC_VERSION__ - 0 >= 199901L
42extern void __assert_c99(const char *, const char *, int, const char *);
43#else
44extern void __assert(const char *, const char *, int);
45#endif /* __STDC_VERSION__ - 0 >= 199901L */
stevel@tonic-gate7c478bd2005-06-14 00:00:00 -070046
Robert Mustacchifc2512c2016-03-28 19:43:25 -070047/*
48 * In C11 the static_assert macro is always defined, unlike the assert macro.
49 */
Andy Fiddaman8dc6d852018-05-09 14:39:57 +000050#if __STDC_VERSION__ - 0 >= 201112L && !defined(__cplusplus)
Robert Mustacchifc2512c2016-03-28 19:43:25 -070051#define static_assert _Static_assert
Andy Fiddaman8dc6d852018-05-09 14:39:57 +000052#endif /* __STDC_VERSION - 0 >= 201112L && !defined(__cplusplus) */
Robert Mustacchifc2512c2016-03-28 19:43:25 -070053
stevel@tonic-gate7c478bd2005-06-14 00:00:00 -070054#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-gate7c478bd2005-06-14 00:00:00 -070075#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-gate7c478bd2005-06-14 00:00:00 -070081
82#endif /* NDEBUG */