]> Savannah Git Hosting - gnulib.git/commitdiff
assert-h, verify: Fix conflict with standard C++ header files on macOS.
authorBruno Haible <bruno@clisp.org>
Sat, 4 Feb 2023 13:31:08 +0000 (14:31 +0100)
committerBruno Haible <bruno@clisp.org>
Fri, 10 Feb 2023 03:07:08 +0000 (04:07 +0100)
* lib/verify.h (_Static_assert): Don't redefine with clang ≥ 3.8.0
in C++ mode.
* tests/test-assert-h-c++.cc: Also check against conflict with the
standard C++ header files.
* tests/test-assert-h-c++2.cc: Likewise.

ChangeLog
lib/verify.h
tests/test-assert-h-c++.cc
tests/test-assert-h-c++2.cc

index 7b0b9112a7b9a4aa5eb35a7a52a5abecf5bca499..eea8ce0dc284fca2ac7c93c5c7a567e048809d77 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2023-02-04  Bruno Haible  <bruno@clisp.org>
+
+       assert-h, verify: Fix conflict with standard C++ header files on macOS.
+       * lib/verify.h (_Static_assert): Don't redefine with clang ≥ 3.8.0
+       in C++ mode.
+       * tests/test-assert-h-c++.cc: Also check against conflict with the
+       standard C++ header files.
+       * tests/test-assert-h-c++2.cc: Likewise.
+
 2023-02-03  Bruno Haible  <bruno@clisp.org>
 
        relocatable-prog: Fix compiler warning.
index f751da2a98b58a006a97385ce67926971fdffa52..e4a8278e035c7c2961d27bfef35f50086a71a9c1 100644 (file)
@@ -222,7 +222,21 @@ template <int w>
 
 /* _GL_STATIC_ASSERT_H is defined if this code is copied into assert.h.  */
 #ifdef _GL_STATIC_ASSERT_H
-# if !defined _GL_HAVE__STATIC_ASSERT1 && !defined _Static_assert
+/* Define _Static_assert if needed.  */
+/* With clang ≥ 3.8.0 in C++ mode, _Static_assert already works and accepts
+   1 or 2 arguments.  We better don't override it, because clang's standard
+   C++ library uses static_assert inside classes in several places, and our
+   replacement via _GL_VERIFY does not work in these contexts.  */
+# if (defined __cplusplus && defined __clang__ \
+      && (4 <= __clang_major__ + (8 <= __clang_minor__)))
+#  if 5 <= __clang_major__
+/* Avoid "warning: 'static_assert' with no message is a C++17 extension".  */
+#   pragma clang diagnostic ignored "-Wc++17-extensions"
+#  else
+/* Avoid "warning: static_assert with no message is a C++1z extension".  */
+#   pragma clang diagnostic ignored "-Wc++1z-extensions"
+#  endif
+# elif !defined _GL_HAVE__STATIC_ASSERT1 && !defined _Static_assert
 #  if !defined _MSC_VER || defined __clang__
 #   define _Static_assert(...) \
       _GL_VERIFY (__VA_ARGS__, "static assertion failed", -)
@@ -233,6 +247,7 @@ template <int w>
       _GL_VERIFY ((R), "static assertion failed", -)
 #  endif
 # endif
+/* Define static_assert if needed.  */
 # if (!defined static_assert \
       && (!defined __cplusplus \
           || (__cpp_static_assert < 201411 \
index 1fc452338dad9c7930b6de3d81a0e1f7b05df56b..6b76565633960469664e4c139ffe0ab58e425b5e 100644 (file)
@@ -1,5 +1,5 @@
 /* Test of <assert.h> substitute in C++ mode.
-   Copyright (C) 2019-2022 Free Software Foundation, Inc.
+   Copyright (C) 2019-2023 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
 
 #include <assert.h>
 
+/* Check against conflicts between <assert.h> and the C++ header files.  */
+#include <stddef.h>
+#include <iostream>
+
 
 int
 main ()
index 9df136cfff8d13d287b02bdf911958f560296065..ffd7c8cf9261c23ebd72fc7e275e4c224ddb1674 100644 (file)
@@ -1,5 +1,5 @@
 /* Test of <assert.h> substitute in C++ mode.
-   Copyright (C) 2019-2022 Free Software Foundation, Inc.
+   Copyright (C) 2019-2023 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -18,3 +18,7 @@
 #include <config.h>
 
 #include <cassert>
+
+/* Check against conflicts between <cassert> and other C++ header files.  */
+#include <stddef.h>
+#include <iostream>