On 11/10/25 12:01 PM, Jakub Jelinek wrote:
Hi!

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.

Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?

OK.
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.

--- gcc/cp/lex.cc.jj    2025-10-09 22:41:19.781274468 +0200
+++ gcc/cp/lex.cc       2025-11-08 09:51:49.579670861 +0100
@@ -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");
        }
      }
--- gcc/testsuite/g++.dg/warn/Wkeyword-macro-1.C.jj 2025-08-07 08:47:14.107784118 +0200
+++ gcc/testsuite/g++.dg/warn/Wkeyword-macro-1.C        2025-11-08 
09:52:37.366992249 +0100
@@ -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 } }
--- gcc/testsuite/g++.dg/warn/Wkeyword-macro-2.C.jj     2025-08-07 
08:47:14.107784118 +0200
+++ gcc/testsuite/g++.dg/warn/Wkeyword-macro-2.C        2025-11-08 
09:53:01.971642849 +0100
@@ -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 } }
--- gcc/testsuite/g++.dg/warn/Wkeyword-macro-4.C.jj     2025-11-08 
09:39:00.091610696 +0100
+++ gcc/testsuite/g++.dg/warn/Wkeyword-macro-4.C        2025-11-08 
09:53:29.352254032 +0100
@@ -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 } }
--- gcc/testsuite/g++.dg/warn/Wkeyword-macro-5.C.jj     2025-11-08 
09:39:34.746117872 +0100
+++ gcc/testsuite/g++.dg/warn/Wkeyword-macro-5.C        2025-11-08 
09:54:01.078803495 +0100
@@ -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 } }
--- gcc/testsuite/g++.dg/warn/Wkeyword-macro-7.C.jj     2025-08-07 
08:47:14.108784105 +0200
+++ gcc/testsuite/g++.dg/warn/Wkeyword-macro-7.C        2025-11-08 
09:54:54.396046360 +0100
@@ -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 } }
--- gcc/testsuite/g++.dg/warn/Wkeyword-macro-8.C.jj     2025-11-08 
09:39:47.451937184 +0100
+++ gcc/testsuite/g++.dg/warn/Wkeyword-macro-8.C        2025-11-08 
09:55:15.758742999 +0100
@@ -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 } }

        Jakub


Reply via email to