[libcxx-commits] [libcxx] [libc++] Fix disabling of extension warnings in C++20 and later (PR #134989)

Nikolas Klauser via libcxx-commits libcxx-commits at lists.llvm.org
Wed Apr 9 03:41:58 PDT 2025


https://github.com/philnik777 created https://github.com/llvm/llvm-project/pull/134989

`__has_feature(modules)` is always true in C++20 and later. Instead of using that, just disable extension warnings if they're not ignored through the system header machinery anyways.


>From 184dbc0330101498ddfc0ef62ef2747922abc97e Mon Sep 17 00:00:00 2001
From: Nikolas Klauser <nikolasklauser at berlin.de>
Date: Wed, 9 Apr 2025 12:40:18 +0200
Subject: [PATCH] [libc++] Fix disabling of extension warnings in C++20 and
 later

---
 libcxx/include/__config | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/libcxx/include/__config b/libcxx/include/__config
index 084e1d4402e6c..05ae32f01e865 100644
--- a/libcxx/include/__config
+++ b/libcxx/include/__config
@@ -543,9 +543,9 @@ typedef __char32_t char32_t;
 #  endif
 
 // Clang modules take a significant compile time hit when pushing and popping diagnostics.
-// Since all the headers are marked as system headers in the modulemap, we can simply disable this
-// pushing and popping when building with clang modules.
-#  if !__has_feature(modules)
+// Since all the headers are marked as system headers unless _LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER is defined, we can
+// simply disable this pushing and popping when _LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER isn't defined.
+#  ifdef _LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER
 #    define _LIBCPP_PUSH_EXTENSION_DIAGNOSTICS                                                                         \
       _LIBCPP_DIAGNOSTIC_PUSH                                                                                          \
       _LIBCPP_CLANG_DIAGNOSTIC_IGNORED("-Wc++11-extensions")                                                           \



More information about the libcxx-commits mailing list