https://gcc.gnu.org/g:5c8fe56a4ca1ed4df2a26cac152fd86af0ebc713

commit r16-5113-g5c8fe56a4ca1ed4df2a26cac152fd86af0ebc713
Author: Jakub Jelinek <[email protected]>
Date:   Mon Nov 10 11:36:42 2025 +0100

    c++: Diagnose #define/#undef indeterminate
    
    While working on CWG3053 I've noticed I forgot to enable diagnostics
    on #define indeterminate or #undef indeterminate now that it is handled
    as valid C++26 attribute.
    
    2025-11-10  Jakub Jelinek  <[email protected]>
    
    gcc/cp/
            * lex.cc (cxx_init): For C++26 call cpp_warn on "indeterminate".
    gcc/testsuite/
            * g++.dg/warn/Wkeyword-macro-1.C: Expect diagnostics on define/undef
            of indeterminate.
            * g++.dg/warn/Wkeyword-macro-2.C: Likewise.
            * g++.dg/warn/Wkeyword-macro-4.C: Likewise.
            * g++.dg/warn/Wkeyword-macro-5.C: Likewise.
            * g++.dg/warn/Wkeyword-macro-7.C: Likewise.
            * g++.dg/warn/Wkeyword-macro-8.C: Likewise.

Diff:
---
 gcc/cp/lex.cc                                | 1 +
 gcc/testsuite/g++.dg/warn/Wkeyword-macro-1.C | 2 +-
 gcc/testsuite/g++.dg/warn/Wkeyword-macro-2.C | 2 +-
 gcc/testsuite/g++.dg/warn/Wkeyword-macro-4.C | 2 +-
 gcc/testsuite/g++.dg/warn/Wkeyword-macro-5.C | 2 +-
 gcc/testsuite/g++.dg/warn/Wkeyword-macro-7.C | 2 +-
 gcc/testsuite/g++.dg/warn/Wkeyword-macro-8.C | 2 +-
 7 files changed, 7 insertions(+), 6 deletions(-)

diff --git a/gcc/cp/lex.cc b/gcc/cp/lex.cc
index 3bc48659a8c7..9a6d56309fd3 100644
--- a/gcc/cp/lex.cc
+++ b/gcc/cp/lex.cc
@@ -422,6 +422,7 @@ cxx_init (void)
        {
          cpp_warn (parse_in, "replaceable_if_eligible");
          cpp_warn (parse_in, "trivially_relocatable_if_eligible");
+         cpp_warn (parse_in, "indeterminate");
        }
     }
 
diff --git a/gcc/testsuite/g++.dg/warn/Wkeyword-macro-1.C 
b/gcc/testsuite/g++.dg/warn/Wkeyword-macro-1.C
index f47de7af26a2..6aee9ebb6096 100644
--- a/gcc/testsuite/g++.dg/warn/Wkeyword-macro-1.C
+++ b/gcc/testsuite/g++.dg/warn/Wkeyword-macro-1.C
@@ -103,7 +103,7 @@
 #define carries_dependency 1
 #define deprecated 1                   // { dg-error "keyword 'deprecated' 
defined as macro" "" { target c++26 } }
 #define fallthrough 1                  // { dg-error "keyword 'fallthrough' 
defined as macro" "" { target c++26 } }
-#define indeterminate 1
+#define indeterminate 1                        // { dg-error "keyword 
'indeterminate' defined as macro" "" { target c++26 } }
 #define likely 1                       // { dg-error "keyword 'likely' defined 
as macro" "" { target c++26 } }
 #define maybe_unused 1                 // { dg-error "keyword 'maybe_unused' 
defined as macro" "" { target c++26 } }
 #define nodiscard 1                    // { dg-error "keyword 'nodiscard' 
defined as macro" "" { target c++26 } }
diff --git a/gcc/testsuite/g++.dg/warn/Wkeyword-macro-2.C 
b/gcc/testsuite/g++.dg/warn/Wkeyword-macro-2.C
index b1a9aa2cd6a0..dd494a15eec2 100644
--- a/gcc/testsuite/g++.dg/warn/Wkeyword-macro-2.C
+++ b/gcc/testsuite/g++.dg/warn/Wkeyword-macro-2.C
@@ -103,7 +103,7 @@
 #define carries_dependency 1
 #define deprecated 1                   // { dg-warning "keyword 'deprecated' 
defined as macro" "" { target c++26 } }
 #define fallthrough 1                  // { dg-warning "keyword 'fallthrough' 
defined as macro" "" { target c++26 } }
-#define indeterminate 1
+#define indeterminate 1                        // { dg-warning "keyword 
'indeterminate' defined as macro" "" { target c++26 } }
 #define likely 1                       // { dg-warning "keyword 'likely' 
defined as macro" "" { target c++26 } }
 #define maybe_unused 1                 // { dg-warning "keyword 'maybe_unused' 
defined as macro" "" { target c++26 } }
 #define nodiscard 1                    // { dg-warning "keyword 'nodiscard' 
defined as macro" "" { target c++26 } }
diff --git a/gcc/testsuite/g++.dg/warn/Wkeyword-macro-4.C 
b/gcc/testsuite/g++.dg/warn/Wkeyword-macro-4.C
index 4fde3ae36d18..1b87f6687dc4 100644
--- a/gcc/testsuite/g++.dg/warn/Wkeyword-macro-4.C
+++ b/gcc/testsuite/g++.dg/warn/Wkeyword-macro-4.C
@@ -103,7 +103,7 @@
 #undef carries_dependency
 #undef deprecated                      // { dg-error "undefining keyword 
'deprecated'" "" { target c++26 } }
 #undef fallthrough                     // { dg-error "undefining keyword 
'fallthrough'" "" { target c++26 } }
-#undef indeterminate
+#undef indeterminate                   // { dg-error "undefining keyword 
'indeterminate'" "" { target c++26 } }
 #undef likely
 #undef maybe_unused                    // { dg-error "undefining keyword 
'maybe_unused'" "" { target c++26 } }
 #undef nodiscard                       // { dg-error "undefining keyword 
'nodiscard'" "" { target c++26 } }
diff --git a/gcc/testsuite/g++.dg/warn/Wkeyword-macro-5.C 
b/gcc/testsuite/g++.dg/warn/Wkeyword-macro-5.C
index 13b3b68386d8..6349b9f1f55f 100644
--- a/gcc/testsuite/g++.dg/warn/Wkeyword-macro-5.C
+++ b/gcc/testsuite/g++.dg/warn/Wkeyword-macro-5.C
@@ -103,7 +103,7 @@
 #undef carries_dependency
 #undef deprecated                      // { dg-warning "undefining keyword 
'deprecated'" "" { target c++26 } }
 #undef fallthrough                     // { dg-warning "undefining keyword 
'fallthrough'" "" { target c++26 } }
-#undef indeterminate
+#undef indeterminate                   // { dg-warning "undefining keyword 
'indeterminate'" "" { target c++26 } }
 #undef likely
 #undef maybe_unused                    // { dg-warning "undefining keyword 
'maybe_unused'" "" { target c++26 } }
 #undef nodiscard                       // { dg-warning "undefining keyword 
'nodiscard'" "" { target c++26 } }
diff --git a/gcc/testsuite/g++.dg/warn/Wkeyword-macro-7.C 
b/gcc/testsuite/g++.dg/warn/Wkeyword-macro-7.C
index 30a2c8d50e1f..3edf57e00885 100644
--- a/gcc/testsuite/g++.dg/warn/Wkeyword-macro-7.C
+++ b/gcc/testsuite/g++.dg/warn/Wkeyword-macro-7.C
@@ -103,7 +103,7 @@
 #define carries_dependency 1           // { dg-warning "keyword 
'carries_dependency' defined as macro" "" { target { c++11 && c++23_down } } }
 #define deprecated 1                   // { dg-warning "keyword 'deprecated' 
defined as macro" "" { target c++14 } }
 #define fallthrough 1                  // { dg-warning "keyword 'fallthrough' 
defined as macro" "" { target c++17 } }
-#define indeterminate 1
+#define indeterminate 1                        // { dg-warning "keyword 
'indeterminate' defined as macro" "" { target c++26 } }
 #define likely 1                       // { dg-warning "keyword 'likely' 
defined as macro" "" { target c++20 } }
 #define maybe_unused 1                 // { dg-warning "keyword 'maybe_unused' 
defined as macro" "" { target c++17 } }
 #define nodiscard 1                    // { dg-warning "keyword 'nodiscard' 
defined as macro" "" { target c++17 } }
diff --git a/gcc/testsuite/g++.dg/warn/Wkeyword-macro-8.C 
b/gcc/testsuite/g++.dg/warn/Wkeyword-macro-8.C
index b9b365e246c8..00efe68bbe43 100644
--- a/gcc/testsuite/g++.dg/warn/Wkeyword-macro-8.C
+++ b/gcc/testsuite/g++.dg/warn/Wkeyword-macro-8.C
@@ -103,7 +103,7 @@
 #undef carries_dependency              // { dg-warning "undefining keyword 
'carries_dependency'" "" { target { c++11 && c++23_down } } }
 #undef deprecated                      // { dg-warning "undefining keyword 
'deprecated'" "" { target c++14 } }
 #undef fallthrough                     // { dg-warning "undefining keyword 
'fallthrough'" "" { target c++17 } }
-#undef indeterminate
+#undef indeterminate                   // { dg-warning "undefining keyword 
'indeterminate'" "" { target c++26 } }
 #undef likely
 #undef maybe_unused                    // { dg-warning "undefining keyword 
'maybe_unused'" "" { target c++17 } }
 #undef nodiscard                       // { dg-warning "undefining keyword 
'nodiscard'" "" { target c++17 } }

Reply via email to