diff --git a/libc/include/assert.h b/libc/include/assert.h index dea838228..8c456ef7c 100644 --- a/libc/include/assert.h +++ b/libc/include/assert.h @@ -1,6 +1,3 @@ -/* $OpenBSD: assert.h,v 1.12 2006/01/31 10:53:51 hshoexer Exp $ */ -/* $NetBSD: assert.h,v 1.6 1994/10/26 00:55:44 cgd Exp $ */ - /*- * Copyright (c) 1992, 1993 * The Regents of the University of California. All rights reserved. @@ -33,34 +30,33 @@ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. - * - * @(#)assert.h 8.2 (Berkeley) 1/21/94 */ /* - * Unlike other ANSI header files, may usefully be included - * multiple times, with and without NDEBUG defined. + * There's no include guard in this file because may usefully be + * included multiple times, with and without NDEBUG defined. */ #include #undef assert -#undef _assert +#undef __assert_no_op + +#define __assert_no_op __BIONIC_CAST(static_cast, void, 0) #ifdef NDEBUG -# define assert(e) ((void)0) -# define _assert(e) ((void)0) +# define assert(e) __assert_no_op #else -# define _assert(e) assert(e) -# if __STDC_VERSION__ >= 199901L -# define assert(e) ((e) ? (void)0 : __assert2(__FILE__, __LINE__, __func__, #e)) +# if defined(__cplusplus) || __STDC_VERSION__ >= 199901L +# define assert(e) ((e) ? __assert_no_op : __assert2(__FILE__, __LINE__, __PRETTY_FUNCTION__, #e)) # else -# define assert(e) ((e) ? (void)0 : __assert(__FILE__, __LINE__, #e)) +# define assert(e) ((e) ? __assert_no_op : __assert(__FILE__, __LINE__, #e)) # endif #endif #if !defined(__cplusplus) && __STDC_VERSION__ >= 201112L -#define static_assert _Static_assert +# undef static_assert +# define static_assert _Static_assert #endif __BEGIN_DECLS diff --git a/libc/include/stdio.h b/libc/include/stdio.h index c876b0f0b..c2f6d84a8 100644 --- a/libc/include/stdio.h +++ b/libc/include/stdio.h @@ -149,7 +149,8 @@ int vprintf(const char * __restrict _Nonnull, __va_list) __printflike(1, 0); int dprintf(int, const char* __restrict _Nonnull, ...) __printflike(2, 3) __INTRODUCED_IN(21); int vdprintf(int, const char* __restrict _Nonnull, __va_list) __printflike(2, 0) __INTRODUCED_IN(21); -#if __STDC_VERSION__ < 201112L +#if (defined(__STDC_VERSION__) && __STDC_VERSION__ < 201112L) || \ + (defined(__cplusplus) && __cplusplus <= 201103L) char* gets(char*) __attribute__((deprecated("gets is unsafe, use fgets instead"))); #endif int sprintf(char* __restrict, const char* __restrict _Nonnull, ...) __printflike(2, 3); diff --git a/libc/include/sys/cdefs.h b/libc/include/sys/cdefs.h index e44ba52a7..eb8ff211f 100644 --- a/libc/include/sys/cdefs.h +++ b/libc/include/sys/cdefs.h @@ -229,16 +229,6 @@ #endif #endif -/* C99 added the `restrict` type qualifier keyword. Before then, `__restrict` is a GNU extension. */ -#if __STDC_VERSION__ >= 199901L -#define __restrict restrict -#endif - -/* C99 added the `__func__` predefined identifier. */ -#if __STDC_VERSION__ < 199901L -#define __func__ __PRETTY_FUNCTION__ -#endif - #define __BIONIC__ 1 #include diff --git a/tests/Android.bp b/tests/Android.bp index c6ec94442..8f937a307 100644 --- a/tests/Android.bp +++ b/tests/Android.bp @@ -52,6 +52,7 @@ cc_test_library { defaults: ["bionic_tests_defaults"], srcs: [ "arpa_inet_test.cpp", + "assert_test.cpp", "buffer_tests.cpp", "bug_26110743_test.cpp", "complex_test.cpp", diff --git a/tests/assert_test.cpp b/tests/assert_test.cpp new file mode 100644 index 000000000..94361513d --- /dev/null +++ b/tests/assert_test.cpp @@ -0,0 +1,43 @@ +/* + * Copyright (C) 2016 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +#undef NDEBUG +#include + +TEST(assert, assert_true) { + assert(true); +} + +TEST(assert, assert_false) { + EXPECT_DEATH(assert(false), + "bionic/tests/assert_test.cpp:.*: " + "virtual void assert_assert_false_Test::TestBody\\(\\): " + "assertion \"false\" failed"); +} + +// Re-include with assertions disabled. +#define NDEBUG +#include + +TEST(assert, assert_true_NDEBUG) { + assert(true); +} + +TEST(assert, assert_false_NDEBUG) { + assert(false); +}