https://github.com/Endilll updated 
https://github.com/llvm/llvm-project/pull/189309

>From 4c00efdc8dd7511c18adf97d3613aade48a1e3ce Mon Sep 17 00:00:00 2001
From: Vlad Serebrennikov <[email protected]>
Date: Mon, 30 Mar 2026 06:35:40 +0300
Subject: [PATCH 1/3] [clang] Add test for CWG3088 about macros that define
 special identifiers

---
 clang/test/CXX/drs/cwg3088.cpp | 270 +++++++++++++++++++++++++++++++++
 clang/test/CXX/drs/cwg30xx.cpp |   2 +
 2 files changed, 272 insertions(+)
 create mode 100644 clang/test/CXX/drs/cwg3088.cpp

diff --git a/clang/test/CXX/drs/cwg3088.cpp b/clang/test/CXX/drs/cwg3088.cpp
new file mode 100644
index 0000000000000..f152a5388211f
--- /dev/null
+++ b/clang/test/CXX/drs/cwg3088.cpp
@@ -0,0 +1,270 @@
+// RUN: %clang_cc1 -std=c++98 -fexceptions -fcxx-exceptions -pedantic-errors 
%s -verify-directives -verify=expected
+// RUN: %clang_cc1 -std=c++11 -fexceptions -fcxx-exceptions -pedantic-errors 
%s -verify-directives -verify=expected,since-cxx11
+// RUN: %clang_cc1 -std=c++14 -fexceptions -fcxx-exceptions -pedantic-errors 
%s -verify-directives -verify=expected,since-cxx11
+// RUN: %clang_cc1 -std=c++17 -fexceptions -fcxx-exceptions -pedantic-errors 
%s -verify-directives -verify=expected,since-cxx11
+// RUN: %clang_cc1 -std=c++20 -fexceptions -fcxx-exceptions -pedantic-errors 
%s -verify-directives -verify=expected,since-cxx11,since-cxx20
+// RUN: %clang_cc1 -std=c++23 -fexceptions -fcxx-exceptions -pedantic-errors 
%s -verify-directives -verify=expected,since-cxx11,since-cxx20
+// RUN: %clang_cc1 -std=c++2c -fexceptions -fcxx-exceptions -pedantic-errors 
%s -verify-directives -verify=expected,since-cxx11,since-cxx20
+
+namespace cwg3088 { // cwg3088: partial
+#define asm
+// expected-error@-1 {{keyword is hidden by macro definition}}
+#define auto
+// expected-error@-1 {{keyword is hidden by macro definition}}
+#define bool
+// expected-error@-1 {{keyword is hidden by macro definition}}
+#define break
+// expected-error@-1 {{keyword is hidden by macro definition}}
+#define case
+// expected-error@-1 {{keyword is hidden by macro definition}}
+#define catch
+// expected-error@-1 {{keyword is hidden by macro definition}}
+#define char
+// expected-error@-1 {{keyword is hidden by macro definition}}
+#define class
+// expected-error@-1 {{keyword is hidden by macro definition}}
+#define const
+// FIXME-error@-1 {{keyword is hidden by macro definition}}
+#define const_cast
+// expected-error@-1 {{keyword is hidden by macro definition}}
+#define continue
+// expected-error@-1 {{keyword is hidden by macro definition}}
+#define default
+// expected-error@-1 {{keyword is hidden by macro definition}}
+#define delete
+// expected-error@-1 {{keyword is hidden by macro definition}}
+#define do
+// expected-error@-1 {{keyword is hidden by macro definition}}
+#define double
+// expected-error@-1 {{keyword is hidden by macro definition}}
+#define dynamic_cast
+// expected-error@-1 {{keyword is hidden by macro definition}}
+#define else
+// expected-error@-1 {{keyword is hidden by macro definition}}
+#define enum
+// expected-error@-1 {{keyword is hidden by macro definition}}
+#define explicit
+// expected-error@-1 {{keyword is hidden by macro definition}}
+#define export
+// expected-error@-1 {{keyword is hidden by macro definition}}
+#define extern
+// FIXME-error@-1 {{keyword is hidden by macro definition}}
+#define false
+// expected-error@-1 {{keyword is hidden by macro definition}}
+#define float
+// expected-error@-1 {{keyword is hidden by macro definition}}
+#define for
+// expected-error@-1 {{keyword is hidden by macro definition}}
+#define friend
+// expected-error@-1 {{keyword is hidden by macro definition}}
+#define goto
+// expected-error@-1 {{keyword is hidden by macro definition}}
+#define if
+// expected-error@-1 {{keyword is hidden by macro definition}}
+#define inline
+// FIXME-error@-1 {{keyword is hidden by macro definition}}
+#define int
+// expected-error@-1 {{keyword is hidden by macro definition}}
+#define long
+// expected-error@-1 {{keyword is hidden by macro definition}}
+#define mutable
+// expected-error@-1 {{keyword is hidden by macro definition}}
+#define namespace
+// expected-error@-1 {{keyword is hidden by macro definition}}
+#define new
+// expected-error@-1 {{keyword is hidden by macro definition}}
+#define operator
+// expected-error@-1 {{keyword is hidden by macro definition}}
+#define private
+// expected-error@-1 {{keyword is hidden by macro definition}}
+#define protected
+// expected-error@-1 {{keyword is hidden by macro definition}}
+#define public
+// expected-error@-1 {{keyword is hidden by macro definition}}
+#define register
+// expected-error@-1 {{keyword is hidden by macro definition}}
+#define reinterpret_cast
+// expected-error@-1 {{keyword is hidden by macro definition}}
+#define return
+// expected-error@-1 {{keyword is hidden by macro definition}}
+#define short
+// expected-error@-1 {{keyword is hidden by macro definition}}
+#define signed
+// expected-error@-1 {{keyword is hidden by macro definition}}
+#define sizeof
+// expected-error@-1 {{keyword is hidden by macro definition}}
+#define static
+// FIXME-error@-1 {{keyword is hidden by macro definition}}
+#define static_cast
+// expected-error@-1 {{keyword is hidden by macro definition}}
+#define struct
+// expected-error@-1 {{keyword is hidden by macro definition}}
+#define switch
+// expected-error@-1 {{keyword is hidden by macro definition}}
+#define template
+// expected-error@-1 {{keyword is hidden by macro definition}}
+#define this
+// expected-error@-1 {{keyword is hidden by macro definition}}
+#define throw
+// expected-error@-1 {{keyword is hidden by macro definition}}
+#define true
+// expected-error@-1 {{keyword is hidden by macro definition}}
+#define try
+// expected-error@-1 {{keyword is hidden by macro definition}}
+#define typedef
+// expected-error@-1 {{keyword is hidden by macro definition}}
+#define typeid
+// expected-error@-1 {{keyword is hidden by macro definition}}
+#define typename
+// expected-error@-1 {{keyword is hidden by macro definition}}
+#define union
+// expected-error@-1 {{keyword is hidden by macro definition}}
+#define unsigned
+// expected-error@-1 {{keyword is hidden by macro definition}}
+#define using
+// expected-error@-1 {{keyword is hidden by macro definition}}
+#define virtual
+// expected-error@-1 {{keyword is hidden by macro definition}}
+#define void
+// expected-error@-1 {{keyword is hidden by macro definition}}
+#define volatile
+// expected-error@-1 {{keyword is hidden by macro definition}}
+#define wchar_t
+// expected-error@-1 {{keyword is hidden by macro definition}}
+#define while
+// expected-error@-1 {{keyword is hidden by macro definition}}
+#define and
+// expected-error@-1 {{C++ operator 'and' (aka '&&') used as a macro name}}
+#define and_eq
+// expected-error@-1 {{C++ operator 'and_eq' (aka '&=') used as a macro name}}
+#define bitand
+// expected-error@-1 {{C++ operator 'bitand' (aka '&') used as a macro name}}
+#define bitor
+// expected-error@-1 {{C++ operator 'bitor' (aka '|') used as a macro name}}
+#define compl
+// expected-error@-1 {{C++ operator 'compl' (aka '~') used as a macro name}}
+#define not
+// expected-error@-1 {{C++ operator 'not' (aka '!') used as a macro name}}
+#define not_eq
+// expected-error@-1 {{C++ operator 'not_eq' (aka '!=') used as a macro name}}
+#define or
+// expected-error@-1 {{C++ operator 'or' (aka '||') used as a macro name}}
+#define or_eq
+// expected-error@-1 {{C++ operator 'or_eq' (aka '|=') used as a macro name}}
+#define xor
+// expected-error@-1 {{C++ operator 'xor' (aka '^') used as a macro name}}
+#define xor_eq
+// expected-error@-1 {{C++ operator 'xor_eq' (aka '^=') used as a macro name}}
+
+#if __cplusplus >= 201103L
+#define alignas
+// since-cxx11-error@-1 {{keyword is hidden by macro definition}}
+#define alignof
+// since-cxx11-error@-1 {{keyword is hidden by macro definition}}
+#define chat16_t
+// FIXME-error@-1 {{keyword is hidden by macro definition}}
+#define char32_t
+// since-cxx11-error@-1 {{keyword is hidden by macro definition}}
+#define constexpr
+// since-cxx11-error@-1 {{keyword is hidden by macro definition}}
+#define decltype
+// since-cxx11-error@-1 {{keyword is hidden by macro definition}}
+#define noexcept
+// since-cxx11-error@-1 {{keyword is hidden by macro definition}}
+#define nullptr
+// since-cxx11-error@-1 {{keyword is hidden by macro definition}}
+#define static_assert
+// since-cxx11-error@-1 {{keyword is hidden by macro definition}}
+#define thread_local
+// since-cxx11-error@-1 {{keyword is hidden by macro definition}}
+
+// Identifiers with special meaning introduced in C++11
+
+#define final
+// since-cxx11-error@-1 {{keyword is hidden by macro definition}}
+#define override
+// since-cxx11-error@-1 {{keyword is hidden by macro definition}}
+
+// Attributes introduced in C++11
+
+// carries_dependency was retroactively removed by P3475R2
+#define noreturn
+// FIXME-since-cxx11-error@-1 {{}}
+#endif
+
+#if __cplusplus >= 201402L
+// Attributes introduced in C++14
+
+#define deprecated
+#endif
+
+#if __cplusplus >= 201703L
+// Attributes introduced in C++17
+
+#define fallthrough
+// FIXME-since-cxx17-error@-1 {{attribute is hidden by macro definition}}
+#define maybe_unused
+// FIXME-since-cxx17-error@-1 {{attribute is hidden by macro definition}}
+#define nodiscard
+// FIXME-since-cxx17-error@-1 {{attribute is hidden by macro definition}}
+#endif
+
+#if __cplusplus >= 202002L
+#define char8_t
+// since-cxx20-error@-1 {{keyword is hidden by macro definition}}
+#define concept
+// since-cxx20-error@-1 {{keyword is hidden by macro definition}}
+#define consteval
+// since-cxx20-error@-1 {{keyword is hidden by macro definition}}
+#define constinit
+// since-cxx20-error@-1 {{keyword is hidden by macro definition}}
+#define co_await
+// since-cxx20-error@-1 {{keyword is hidden by macro definition}}
+#define co_return
+// since-cxx20-error@-1 {{keyword is hidden by macro definition}}
+#define co_yield
+// since-cxx20-error@-1 {{keyword is hidden by macro definition}}
+#define requires
+// since-cxx20-error@-1 {{keyword is hidden by macro definition}}
+
+// Identifiers with special meaning introduced in C++20
+
+#define import
+// FIXME-error@-1 {{keyword is hidden by macro definition}}
+#define module
+// FIXME-error@-1 {{keyword is hidden by macro definition}}
+
+// Attributes introduced in C++20
+
+#define likely
+// FIXME-since-cxx20-error@-1 {{attribute is hidden by macro definition}}
+#define no_unique_address
+// FIXME-since-cxx20-error@-1 {{attribute is hidden by macro definition}}
+#define unlikely
+// FIXME-since-cxx20-error@-1 {{attribute is hidden by macro definition}}
+#endif
+
+#if __cplusplus >= 202302L
+// Attributes introduced in C++23
+
+#define assume
+// FIXME-since-cxx23-error@-1 {{attribute is hidden by macro definition}}
+#endif
+
+#if __cplusplus >= 202600L
+#define contract_assert
+// FIXME-error@-1 {{keyword is hidden by macro definition}}
+
+// Identifiers with special meaning introduced in C++26
+
+#define post
+// FIXME-error@-1 {{keyword is hidden by macro definition}}
+#define pre
+// FIXME-error@-1 {{keyword is hidden by macro definition}}
+
+// Attributes introduced in C++26
+
+#define indeterminate
+// FIXME-since-cxx26-error@-1 {{attribute is hidden by macro definition}}
+#endif
+} // namespace cwg3088
diff --git a/clang/test/CXX/drs/cwg30xx.cpp b/clang/test/CXX/drs/cwg30xx.cpp
index 356c2cd68b4b7..84b0da6a1662a 100644
--- a/clang/test/CXX/drs/cwg30xx.cpp
+++ b/clang/test/CXX/drs/cwg30xx.cpp
@@ -21,3 +21,5 @@ void f(
 }
 
 } // namespace cwg3005
+
+// cwg3088 is in cwg3088.cpp

>From 2aca6868a2c849623cbb080f0b1e4495f6ea9658 Mon Sep 17 00:00:00 2001
From: Vlad Serebrennikov <[email protected]>
Date: Mon, 30 Mar 2026 07:00:52 +0300
Subject: [PATCH 2/3] Add missing diagnostic text for a FIXME

---
 clang/test/CXX/drs/cwg3088.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/clang/test/CXX/drs/cwg3088.cpp b/clang/test/CXX/drs/cwg3088.cpp
index f152a5388211f..a3cde51b6bc5a 100644
--- a/clang/test/CXX/drs/cwg3088.cpp
+++ b/clang/test/CXX/drs/cwg3088.cpp
@@ -189,7 +189,7 @@ namespace cwg3088 { // cwg3088: partial
 
 // carries_dependency was retroactively removed by P3475R2
 #define noreturn
-// FIXME-since-cxx11-error@-1 {{}}
+// FIXME-since-cxx11-error@-1 {{attribute is hidden by macro definition}}
 #endif
 
 #if __cplusplus >= 201402L

>From 158383b3c3974ff577ad2442d35d71c2b576879b Mon Sep 17 00:00:00 2001
From: Vlad Serebrennikov <[email protected]>
Date: Mon, 30 Mar 2026 17:10:00 +0300
Subject: [PATCH 3/3] Address feedback

---
 clang/test/CXX/drs/cwg3088.cpp | 324 +++++++++++++++++++++++++++++++++
 1 file changed, 324 insertions(+)

diff --git a/clang/test/CXX/drs/cwg3088.cpp b/clang/test/CXX/drs/cwg3088.cpp
index a3cde51b6bc5a..ac0b55475fdc3 100644
--- a/clang/test/CXX/drs/cwg3088.cpp
+++ b/clang/test/CXX/drs/cwg3088.cpp
@@ -7,183 +7,459 @@
 // RUN: %clang_cc1 -std=c++2c -fexceptions -fcxx-exceptions -pedantic-errors 
%s -verify-directives -verify=expected,since-cxx11,since-cxx20
 
 namespace cwg3088 { // cwg3088: partial
+// Keywords introduced in C++98
+
 #define asm
 // expected-error@-1 {{keyword is hidden by macro definition}}
+#undef asm
+#define asm()
+// expected-error@-1 {{keyword is hidden by macro definition}}
 #define auto
 // expected-error@-1 {{keyword is hidden by macro definition}}
+#undef auto
+#define auto()
+// expected-error@-1 {{keyword is hidden by macro definition}}
 #define bool
 // expected-error@-1 {{keyword is hidden by macro definition}}
+#undef bool
+#define bool()
+// expected-error@-1 {{keyword is hidden by macro definition}}
 #define break
 // expected-error@-1 {{keyword is hidden by macro definition}}
+#undef break
+#define break()
+// expected-error@-1 {{keyword is hidden by macro definition}}
 #define case
 // expected-error@-1 {{keyword is hidden by macro definition}}
+#undef case
+#define case()
+// expected-error@-1 {{keyword is hidden by macro definition}}
 #define catch
 // expected-error@-1 {{keyword is hidden by macro definition}}
+#undef catch
+#define catch()
+// expected-error@-1 {{keyword is hidden by macro definition}}
 #define char
 // expected-error@-1 {{keyword is hidden by macro definition}}
+#undef char
+#define char()
+// expected-error@-1 {{keyword is hidden by macro definition}}
 #define class
 // expected-error@-1 {{keyword is hidden by macro definition}}
+#undef class
+#define class()
+// expected-error@-1 {{keyword is hidden by macro definition}}
 #define const
 // FIXME-error@-1 {{keyword is hidden by macro definition}}
+#undef const
+#define const()
+// FIXME-error@-1 {{keyword is hidden by macro definition}}
 #define const_cast
 // expected-error@-1 {{keyword is hidden by macro definition}}
+#undef const_cast
+#define const_cast()
+// expected-error@-1 {{keyword is hidden by macro definition}}
 #define continue
 // expected-error@-1 {{keyword is hidden by macro definition}}
+#undef continue
+#define continue()
+// expected-error@-1 {{keyword is hidden by macro definition}}
 #define default
 // expected-error@-1 {{keyword is hidden by macro definition}}
+#undef default
+#define default()
+// expected-error@-1 {{keyword is hidden by macro definition}}
 #define delete
 // expected-error@-1 {{keyword is hidden by macro definition}}
+#undef delete
+#define delete()
+// expected-error@-1 {{keyword is hidden by macro definition}}
 #define do
 // expected-error@-1 {{keyword is hidden by macro definition}}
+#undef do
+#define do()
+// expected-error@-1 {{keyword is hidden by macro definition}}
 #define double
 // expected-error@-1 {{keyword is hidden by macro definition}}
+#undef double
+#define double()
+// expected-error@-1 {{keyword is hidden by macro definition}}
 #define dynamic_cast
 // expected-error@-1 {{keyword is hidden by macro definition}}
+#undef dynamic_cast
+#define dynamic_cast()
+// expected-error@-1 {{keyword is hidden by macro definition}}
 #define else
 // expected-error@-1 {{keyword is hidden by macro definition}}
+#undef else
+#define else()
+// expected-error@-1 {{keyword is hidden by macro definition}}
 #define enum
 // expected-error@-1 {{keyword is hidden by macro definition}}
+#undef enum
+#define enum()
+// expected-error@-1 {{keyword is hidden by macro definition}}
 #define explicit
 // expected-error@-1 {{keyword is hidden by macro definition}}
+#undef explicit
+#define explicit()
+// expected-error@-1 {{keyword is hidden by macro definition}}
 #define export
 // expected-error@-1 {{keyword is hidden by macro definition}}
+#undef export
+#define export()
+// expected-error@-1 {{keyword is hidden by macro definition}}
 #define extern
 // FIXME-error@-1 {{keyword is hidden by macro definition}}
+#undef extern
+#define extern()
+// FIXME-error@-1 {{keyword is hidden by macro definition}}
 #define false
 // expected-error@-1 {{keyword is hidden by macro definition}}
+#undef false
+#define false()
+// expected-error@-1 {{keyword is hidden by macro definition}}
 #define float
 // expected-error@-1 {{keyword is hidden by macro definition}}
+#undef float
+#define float()
+// expected-error@-1 {{keyword is hidden by macro definition}}
 #define for
 // expected-error@-1 {{keyword is hidden by macro definition}}
+#undef for
+#define for()
+// expected-error@-1 {{keyword is hidden by macro definition}}
 #define friend
 // expected-error@-1 {{keyword is hidden by macro definition}}
+#undef friend
+#define friend()
+// expected-error@-1 {{keyword is hidden by macro definition}}
 #define goto
 // expected-error@-1 {{keyword is hidden by macro definition}}
+#undef goto
+#define goto()
+// expected-error@-1 {{keyword is hidden by macro definition}}
 #define if
 // expected-error@-1 {{keyword is hidden by macro definition}}
+#undef if
+#define if()
+// expected-error@-1 {{keyword is hidden by macro definition}}
 #define inline
 // FIXME-error@-1 {{keyword is hidden by macro definition}}
+#undef inline
+#define inline()
+// FIXME-error@-1 {{keyword is hidden by macro definition}}
 #define int
 // expected-error@-1 {{keyword is hidden by macro definition}}
+#undef int
+#define int()
+// expected-error@-1 {{keyword is hidden by macro definition}}
 #define long
 // expected-error@-1 {{keyword is hidden by macro definition}}
+#undef long
+#define long()
+// expected-error@-1 {{keyword is hidden by macro definition}}
 #define mutable
 // expected-error@-1 {{keyword is hidden by macro definition}}
+#undef mutable
+#define mutable()
+// expected-error@-1 {{keyword is hidden by macro definition}}
 #define namespace
 // expected-error@-1 {{keyword is hidden by macro definition}}
+#undef namespace
+#define namespace()
+// expected-error@-1 {{keyword is hidden by macro definition}}
 #define new
 // expected-error@-1 {{keyword is hidden by macro definition}}
+#undef new
+#define new()
+// expected-error@-1 {{keyword is hidden by macro definition}}
 #define operator
 // expected-error@-1 {{keyword is hidden by macro definition}}
+#undef operator
+#define operator()
+// expected-error@-1 {{keyword is hidden by macro definition}}
 #define private
 // expected-error@-1 {{keyword is hidden by macro definition}}
+#undef private
+#define private()
+// expected-error@-1 {{keyword is hidden by macro definition}}
 #define protected
 // expected-error@-1 {{keyword is hidden by macro definition}}
+#undef protected
+#define protected()
+// expected-error@-1 {{keyword is hidden by macro definition}}
 #define public
 // expected-error@-1 {{keyword is hidden by macro definition}}
+#undef public
+#define public()
+// expected-error@-1 {{keyword is hidden by macro definition}}
 #define register
 // expected-error@-1 {{keyword is hidden by macro definition}}
+#undef register
+#define register()
+// expected-error@-1 {{keyword is hidden by macro definition}}
 #define reinterpret_cast
 // expected-error@-1 {{keyword is hidden by macro definition}}
+#undef reinterpret_cast
+#define reinterpret_cast()
+// expected-error@-1 {{keyword is hidden by macro definition}}
 #define return
 // expected-error@-1 {{keyword is hidden by macro definition}}
+#undef return
+#define return()
+// expected-error@-1 {{keyword is hidden by macro definition}}
 #define short
 // expected-error@-1 {{keyword is hidden by macro definition}}
+#undef short
+#define short()
+// expected-error@-1 {{keyword is hidden by macro definition}}
 #define signed
 // expected-error@-1 {{keyword is hidden by macro definition}}
+#undef signed
+#define signed()
+// expected-error@-1 {{keyword is hidden by macro definition}}
 #define sizeof
 // expected-error@-1 {{keyword is hidden by macro definition}}
+#undef sizeof
+#define sizeof()
+// expected-error@-1 {{keyword is hidden by macro definition}}
 #define static
 // FIXME-error@-1 {{keyword is hidden by macro definition}}
+#undef static
+#define static()
+// FIXME-error@-1 {{keyword is hidden by macro definition}}
 #define static_cast
 // expected-error@-1 {{keyword is hidden by macro definition}}
+#undef static_cast
+#define static_cast()
+// expected-error@-1 {{keyword is hidden by macro definition}}
 #define struct
 // expected-error@-1 {{keyword is hidden by macro definition}}
+#undef struct
+#define struct()
+// expected-error@-1 {{keyword is hidden by macro definition}}
 #define switch
 // expected-error@-1 {{keyword is hidden by macro definition}}
+#undef switch
+#define switch()
+// expected-error@-1 {{keyword is hidden by macro definition}}
 #define template
 // expected-error@-1 {{keyword is hidden by macro definition}}
+#undef template
+#define template()
+// expected-error@-1 {{keyword is hidden by macro definition}}
 #define this
 // expected-error@-1 {{keyword is hidden by macro definition}}
+#undef this
+#define this()
+// expected-error@-1 {{keyword is hidden by macro definition}}
 #define throw
 // expected-error@-1 {{keyword is hidden by macro definition}}
+#undef throw
+#define throw()
+// expected-error@-1 {{keyword is hidden by macro definition}}
 #define true
 // expected-error@-1 {{keyword is hidden by macro definition}}
+#undef true
+#define true()
+// expected-error@-1 {{keyword is hidden by macro definition}}
 #define try
 // expected-error@-1 {{keyword is hidden by macro definition}}
+#undef try
+#define try()
+// expected-error@-1 {{keyword is hidden by macro definition}}
 #define typedef
 // expected-error@-1 {{keyword is hidden by macro definition}}
+#undef typedef
+#define typedef()
+// expected-error@-1 {{keyword is hidden by macro definition}}
 #define typeid
 // expected-error@-1 {{keyword is hidden by macro definition}}
+#undef typeid
+#define typeid()
+// expected-error@-1 {{keyword is hidden by macro definition}}
 #define typename
 // expected-error@-1 {{keyword is hidden by macro definition}}
+#undef typename
+#define typename()
+// expected-error@-1 {{keyword is hidden by macro definition}}
 #define union
 // expected-error@-1 {{keyword is hidden by macro definition}}
+#undef union
+#define union()
+// expected-error@-1 {{keyword is hidden by macro definition}}
 #define unsigned
 // expected-error@-1 {{keyword is hidden by macro definition}}
+#undef unsigned
+#define unsigned()
+// expected-error@-1 {{keyword is hidden by macro definition}}
 #define using
 // expected-error@-1 {{keyword is hidden by macro definition}}
+#undef using
+#define using()
+// expected-error@-1 {{keyword is hidden by macro definition}}
 #define virtual
 // expected-error@-1 {{keyword is hidden by macro definition}}
+#undef virtual
+#define virtual()
+// expected-error@-1 {{keyword is hidden by macro definition}}
 #define void
 // expected-error@-1 {{keyword is hidden by macro definition}}
+#undef void
+#define void()
+// expected-error@-1 {{keyword is hidden by macro definition}}
 #define volatile
 // expected-error@-1 {{keyword is hidden by macro definition}}
+#undef volatile
+#define volatile()
+// expected-error@-1 {{keyword is hidden by macro definition}}
 #define wchar_t
 // expected-error@-1 {{keyword is hidden by macro definition}}
+#undef wchar_t
+#define wchar_t()
+// expected-error@-1 {{keyword is hidden by macro definition}}
 #define while
 // expected-error@-1 {{keyword is hidden by macro definition}}
+#undef while
+#define while()
+// expected-error@-1 {{keyword is hidden by macro definition}}
+
+// Alternative spellings introduced in C++98
+
 #define and
 // expected-error@-1 {{C++ operator 'and' (aka '&&') used as a macro name}}
+#undef and
+// expected-error@-1 {{C++ operator 'and' (aka '&&') used as a macro name}}
+#define and()
+// expected-error@-1 {{C++ operator 'and' (aka '&&') used as a macro name}}
 #define and_eq
 // expected-error@-1 {{C++ operator 'and_eq' (aka '&=') used as a macro name}}
+#undef and_eq
+// expected-error@-1 {{C++ operator 'and_eq' (aka '&=') used as a macro name}}
+#define and_eq()
+// expected-error@-1 {{C++ operator 'and_eq' (aka '&=') used as a macro name}}
 #define bitand
 // expected-error@-1 {{C++ operator 'bitand' (aka '&') used as a macro name}}
+#undef bitand
+// expected-error@-1 {{C++ operator 'bitand' (aka '&') used as a macro name}}
+#define bitand()
+// expected-error@-1 {{C++ operator 'bitand' (aka '&') used as a macro name}}
 #define bitor
 // expected-error@-1 {{C++ operator 'bitor' (aka '|') used as a macro name}}
+#undef bitor
+// expected-error@-1 {{C++ operator 'bitor' (aka '|') used as a macro name}}
+#define bitor()
+// expected-error@-1 {{C++ operator 'bitor' (aka '|') used as a macro name}}
 #define compl
 // expected-error@-1 {{C++ operator 'compl' (aka '~') used as a macro name}}
+#undef compl
+// expected-error@-1 {{C++ operator 'compl' (aka '~') used as a macro name}}
+#define compl()
+// expected-error@-1 {{C++ operator 'compl' (aka '~') used as a macro name}}
 #define not
 // expected-error@-1 {{C++ operator 'not' (aka '!') used as a macro name}}
+#undef not
+// expected-error@-1 {{C++ operator 'not' (aka '!') used as a macro name}}
+#define not()
+// expected-error@-1 {{C++ operator 'not' (aka '!') used as a macro name}}
 #define not_eq
 // expected-error@-1 {{C++ operator 'not_eq' (aka '!=') used as a macro name}}
+#undef not_eq
+// expected-error@-1 {{C++ operator 'not_eq' (aka '!=') used as a macro name}}
+#define not_eq()
+// expected-error@-1 {{C++ operator 'not_eq' (aka '!=') used as a macro name}}
 #define or
 // expected-error@-1 {{C++ operator 'or' (aka '||') used as a macro name}}
+#undef or
+// expected-error@-1 {{C++ operator 'or' (aka '||') used as a macro name}}
+#define or()
+// expected-error@-1 {{C++ operator 'or' (aka '||') used as a macro name}}
 #define or_eq
 // expected-error@-1 {{C++ operator 'or_eq' (aka '|=') used as a macro name}}
+#undef or_eq
+// expected-error@-1 {{C++ operator 'or_eq' (aka '|=') used as a macro name}}
+#define or_eq()
+// expected-error@-1 {{C++ operator 'or_eq' (aka '|=') used as a macro name}}
 #define xor
 // expected-error@-1 {{C++ operator 'xor' (aka '^') used as a macro name}}
+#undef xor
+// expected-error@-1 {{C++ operator 'xor' (aka '^') used as a macro name}}
+#define xor()
+// expected-error@-1 {{C++ operator 'xor' (aka '^') used as a macro name}}
+#define xor_eq
+// expected-error@-1 {{C++ operator 'xor_eq' (aka '^=') used as a macro name}}
+#undef xor_eq
+// expected-error@-1 {{C++ operator 'xor_eq' (aka '^=') used as a macro name}}
 #define xor_eq
 // expected-error@-1 {{C++ operator 'xor_eq' (aka '^=') used as a macro name}}
 
 #if __cplusplus >= 201103L
+// Keywords introduced in C++11
+
 #define alignas
 // since-cxx11-error@-1 {{keyword is hidden by macro definition}}
+#undef alignas
+#define alignas()
+// since-cxx11-error@-1 {{keyword is hidden by macro definition}}
 #define alignof
 // since-cxx11-error@-1 {{keyword is hidden by macro definition}}
+#undef alignof
+#define alignof()
+// since-cxx11-error@-1 {{keyword is hidden by macro definition}}
 #define chat16_t
 // FIXME-error@-1 {{keyword is hidden by macro definition}}
+#undef char16_t
+#define char16_t()
+// since-cxx11-error@-1 {{keyword is hidden by macro definition}}
 #define char32_t
 // since-cxx11-error@-1 {{keyword is hidden by macro definition}}
+#undef char32_t
+#define char32_t()
+// since-cxx11-error@-1 {{keyword is hidden by macro definition}}
 #define constexpr
 // since-cxx11-error@-1 {{keyword is hidden by macro definition}}
+#undef constexpr
+#define constexpr()
+// since-cxx11-error@-1 {{keyword is hidden by macro definition}}
 #define decltype
 // since-cxx11-error@-1 {{keyword is hidden by macro definition}}
+#undef decltype
+#define decltype()
+// since-cxx11-error@-1 {{keyword is hidden by macro definition}}
 #define noexcept
 // since-cxx11-error@-1 {{keyword is hidden by macro definition}}
+#undef noexcept
+#define noexcept()
+// since-cxx11-error@-1 {{keyword is hidden by macro definition}}
 #define nullptr
 // since-cxx11-error@-1 {{keyword is hidden by macro definition}}
+#undef nullptr
+#define nullptr()
+// since-cxx11-error@-1 {{keyword is hidden by macro definition}}
 #define static_assert
 // since-cxx11-error@-1 {{keyword is hidden by macro definition}}
+#undef static_assert
+#define static_assert()
+// since-cxx11-error@-1 {{keyword is hidden by macro definition}}
 #define thread_local
 // since-cxx11-error@-1 {{keyword is hidden by macro definition}}
+#undef thread_local
+#define thread_local()
+// since-cxx11-error@-1 {{keyword is hidden by macro definition}}
 
 // Identifiers with special meaning introduced in C++11
 
 #define final
 // since-cxx11-error@-1 {{keyword is hidden by macro definition}}
+#undef final
+#define final()
+// since-cxx11-error@-1 {{keyword is hidden by macro definition}}
 #define override
 // since-cxx11-error@-1 {{keyword is hidden by macro definition}}
+#undef override
+#define override()
+// since-cxx11-error@-1 {{keyword is hidden by macro definition}}
 
 // Attributes introduced in C++11
 
@@ -196,6 +472,7 @@ namespace cwg3088 { // cwg3088: partial
 // Attributes introduced in C++14
 
 #define deprecated
+// FIXME-since-cxx14-error@-1 {{attribute is hidden by macro definition}}
 #endif
 
 #if __cplusplus >= 201703L
@@ -210,38 +487,74 @@ namespace cwg3088 { // cwg3088: partial
 #endif
 
 #if __cplusplus >= 202002L
+// Keywords introduced in C++20
+
 #define char8_t
 // since-cxx20-error@-1 {{keyword is hidden by macro definition}}
+#undef char8_t
+#define char8_t()
+// since-cxx20-error@-1 {{keyword is hidden by macro definition}}
 #define concept
 // since-cxx20-error@-1 {{keyword is hidden by macro definition}}
+#undef concept
+#define concept()
+// since-cxx20-error@-1 {{keyword is hidden by macro definition}}
 #define consteval
 // since-cxx20-error@-1 {{keyword is hidden by macro definition}}
+#undef consteval
+#define consteval()
+// since-cxx20-error@-1 {{keyword is hidden by macro definition}}
 #define constinit
 // since-cxx20-error@-1 {{keyword is hidden by macro definition}}
+#undef constinit
+#define constinit()
+// since-cxx20-error@-1 {{keyword is hidden by macro definition}}
 #define co_await
 // since-cxx20-error@-1 {{keyword is hidden by macro definition}}
+#undef co_await
+#define co_await()
+// since-cxx20-error@-1 {{keyword is hidden by macro definition}}
 #define co_return
 // since-cxx20-error@-1 {{keyword is hidden by macro definition}}
+#undef co_return
+#define co_return()
+// since-cxx20-error@-1 {{keyword is hidden by macro definition}}
+#define co_yield
+// since-cxx20-error@-1 {{keyword is hidden by macro definition}}
+#undef co_yield
 #define co_yield
 // since-cxx20-error@-1 {{keyword is hidden by macro definition}}
 #define requires
 // since-cxx20-error@-1 {{keyword is hidden by macro definition}}
+#undef requires
+#define requires()
+// since-cxx20-error@-1 {{keyword is hidden by macro definition}}
 
 // Identifiers with special meaning introduced in C++20
 
 #define import
 // FIXME-error@-1 {{keyword is hidden by macro definition}}
+#undef import
+#define import()
+// FIXME-error@-1 {{keyword is hidden by macro definition}}
 #define module
 // FIXME-error@-1 {{keyword is hidden by macro definition}}
+#undef module
+#define module()
+// FIXME-error@-1 {{keyword is hidden by macro definition}}
 
 // Attributes introduced in C++20
 
 #define likely
 // FIXME-since-cxx20-error@-1 {{attribute is hidden by macro definition}}
+#undef likely
+#define likely()
 #define no_unique_address
 // FIXME-since-cxx20-error@-1 {{attribute is hidden by macro definition}}
 #define unlikely
+#undef unlikely
 // FIXME-since-cxx20-error@-1 {{attribute is hidden by macro definition}}
+#define unlikely()
 #endif
 
 #if __cplusplus >= 202302L
@@ -252,15 +565,26 @@ namespace cwg3088 { // cwg3088: partial
 #endif
 
 #if __cplusplus >= 202600L
+// Keywords introduced in C++26
+
 #define contract_assert
 // FIXME-error@-1 {{keyword is hidden by macro definition}}
+#undef contract_assert
+#define contract_assert()
+// FIXME-error@-1 {{keyword is hidden by macro definition}}
 
 // Identifiers with special meaning introduced in C++26
 
 #define post
 // FIXME-error@-1 {{keyword is hidden by macro definition}}
+#undef post
+#define post()
+// FIXME-error@-1 {{keyword is hidden by macro definition}}
 #define pre
 // FIXME-error@-1 {{keyword is hidden by macro definition}}
+#undef pre
+#define pre()
+// FIXME-error@-1 {{keyword is hidden by macro definition}}
 
 // Attributes introduced in C++26
 

_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to