[clang] 7ca7bcb - [clang-repl] Ensure clang-repl accepts all C keywords supported in all language models (#142749)
via cfe-commits
cfe-commits at lists.llvm.org
Wed Jun 4 22:53:54 PDT 2025
Author: Anutosh Bhat
Date: 2025-06-05T11:23:50+05:30
New Revision: 7ca7bcb7d8dcf26fc0281697fe47aa6cdb3884c0
URL: https://github.com/llvm/llvm-project/commit/7ca7bcb7d8dcf26fc0281697fe47aa6cdb3884c0
DIFF: https://github.com/llvm/llvm-project/commit/7ca7bcb7d8dcf26fc0281697fe47aa6cdb3884c0.diff
LOG: [clang-repl] Ensure clang-repl accepts all C keywords supported in all language models (#142749)
As can be seen through the docs
(https://github.com/llvm/llvm-project/blob/7e1fa09ce2a228c949ce4490c98f2c73ed8ada00/clang/docs/LanguageExtensions.rst#c-keywords-supported-in-all-language-modes),
Clang supports certain C keywords in all language modes — this patch
ensures clang-repl handles them consistently.
Here's an example testing all the above keywords. We have everything in
place except `_Imaginary` (_Complex works but _Imaginary doesn't which
was weird) and `_Noreturn`
Added:
Modified:
clang/lib/Parse/ParseTentative.cpp
clang/test/Interpreter/disambiguate-decl-stmt.cpp
Removed:
################################################################################
diff --git a/clang/lib/Parse/ParseTentative.cpp b/clang/lib/Parse/ParseTentative.cpp
index 95cee824c40b7..f50bcd8ea90bb 100644
--- a/clang/lib/Parse/ParseTentative.cpp
+++ b/clang/lib/Parse/ParseTentative.cpp
@@ -1171,6 +1171,7 @@ Parser::isCXXDeclarationSpecifier(ImplicitTypenameContext AllowImplicitTypename,
case tok::kw_inline:
case tok::kw_virtual:
case tok::kw_explicit:
+ case tok::kw__Noreturn:
// Modules
case tok::kw___module_private__:
@@ -1225,6 +1226,7 @@ Parser::isCXXDeclarationSpecifier(ImplicitTypenameContext AllowImplicitTypename,
// GNU
case tok::kw_restrict:
case tok::kw__Complex:
+ case tok::kw__Imaginary:
case tok::kw___attribute:
case tok::kw___auto_type:
return TPResult::True;
diff --git a/clang/test/Interpreter/disambiguate-decl-stmt.cpp b/clang/test/Interpreter/disambiguate-decl-stmt.cpp
index 1f4d5e267288b..f2a59c510f9a2 100644
--- a/clang/test/Interpreter/disambiguate-decl-stmt.cpp
+++ b/clang/test/Interpreter/disambiguate-decl-stmt.cpp
@@ -102,3 +102,16 @@ __attribute((noreturn)) Attrs2::Attrs2() = default;
// Extra semicolon
namespace N {};
+
+// Test C keywords supported in all language modes.
+// https://clang.llvm.org/docs/LanguageExtensions.html#c-keywords-supported-in-all-language-modes
+
+_Alignas(16) int aligned_var;
+int align = _Alignof(double);
+_Atomic int atomic_var = 0;
+_Complex double complex_val = 1.0 + 2.0i;
+_Float16 f = 1.5;
+_Thread_local int counter = 0;
+_Static_assert(sizeof(int) == 4, "int must be 4 bytes");
+_Imaginary float i = 2.0f; // expected-error {{imaginary types are not supported}}
+_Noreturn void noreturn_func() { while (true) {} }
\ No newline at end of file
More information about the cfe-commits
mailing list