https://github.com/Susikrishna updated https://github.com/llvm/llvm-project/pull/166332
>From 16414b96e0ca5ee44b0332bc387ecbd0046eacd4 Mon Sep 17 00:00:00 2001 From: Susikrishna <[email protected]> Date: Tue, 4 Nov 2025 12:49:38 +0530 Subject: [PATCH 1/3] [Clang] Use ExtWarn for static local variable in extern inline function (fixes #39524) --- clang/include/clang/Basic/DiagnosticSemaKinds.td | 8 +++++--- clang/test/Sema/inline-static-var.c | 7 +++++++ 2 files changed, 12 insertions(+), 3 deletions(-) create mode 100644 clang/test/Sema/inline-static-var.c diff --git a/clang/include/clang/Basic/DiagnosticSemaKinds.td b/clang/include/clang/Basic/DiagnosticSemaKinds.td index 4e369be0bbb92..80272e24eced8 100644 --- a/clang/include/clang/Basic/DiagnosticSemaKinds.td +++ b/clang/include/clang/Basic/DiagnosticSemaKinds.td @@ -6337,9 +6337,11 @@ def warn_c2y_compat_internal_in_extern_inline : Warning< "using static %select{function|variable}0 %1 in an inline function with " "external linkage is incompatible with standards before C2y">, InGroup<CPre2yCompat>, DefaultIgnore; -def warn_static_local_in_extern_inline : Warning< - "non-constant static local variable in inline function may be different " - "in different files">, InGroup<StaticLocalInInline>; +def warn_static_local_in_extern_inline + : ExtWarn<"non-constant static local variable in inline function may be " + "different " + "in different files">, + InGroup<StaticLocalInInline>; def note_convert_inline_to_static : Note< "use 'static' to give inline function %0 internal linkage">; diff --git a/clang/test/Sema/inline-static-var.c b/clang/test/Sema/inline-static-var.c new file mode 100644 index 0000000000000..f622a7f22e02c --- /dev/null +++ b/clang/test/Sema/inline-static-var.c @@ -0,0 +1,7 @@ +// RUN: %clang_cc1 -std=c11 -Wno-unused-variable -Wno-deprecated-non-prototype -Wno-inline -pedantic-errors -verify %s + +inline void f(void) { // expected-note {{use 'static' to give inline function 'f' internal linkage}} + static int x; // expected-error {{non-constant static local variable in inline function may be different in different files}} +} + +int main(void) { return 0; } >From ee314e1af7b74a02c31f38493262025912bc1d8e Mon Sep 17 00:00:00 2001 From: V S Susi Krishna <[email protected]> Date: Wed, 5 Nov 2025 21:42:38 +0530 Subject: [PATCH 2/3] Update clang/test/Sema/inline-static-var.c Co-authored-by: Sirraide <[email protected]> --- clang/test/Sema/inline-static-var.c | 1 - 1 file changed, 1 deletion(-) diff --git a/clang/test/Sema/inline-static-var.c b/clang/test/Sema/inline-static-var.c index f622a7f22e02c..641f952ac6da7 100644 --- a/clang/test/Sema/inline-static-var.c +++ b/clang/test/Sema/inline-static-var.c @@ -4,4 +4,3 @@ inline void f(void) { // expected-note {{use 'static' to give inline function 'f static int x; // expected-error {{non-constant static local variable in inline function may be different in different files}} } -int main(void) { return 0; } >From b4abe8eab1fc27e584da327c581260a93596f1d7 Mon Sep 17 00:00:00 2001 From: Susikrishna <[email protected]> Date: Wed, 5 Nov 2025 22:23:48 +0530 Subject: [PATCH 3/3] Update release notes and diagnostics for static local variables in extern inline functions --- clang/docs/ReleaseNotes.rst | 4 ++++ clang/include/clang/Basic/DiagnosticSemaKinds.td | 8 +++----- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst index 3f57ddc92d5e8..f4d1d379e5608 100644 --- a/clang/docs/ReleaseNotes.rst +++ b/clang/docs/ReleaseNotes.rst @@ -402,6 +402,10 @@ Improvements to Clang's diagnostics - Clang now emits a diagnostic in case `vector_size` or `ext_vector_type` attributes are used with a negative size (#GH165463). +- Clang now emits an extension warning (`ExtWarn`) instead of a regular warning + for static local variables declared inside `extern inline` functions + (#GH39524). + Improvements to Clang's time-trace ---------------------------------- diff --git a/clang/include/clang/Basic/DiagnosticSemaKinds.td b/clang/include/clang/Basic/DiagnosticSemaKinds.td index 629a2b9493c66..7f10a0cd0a770 100644 --- a/clang/include/clang/Basic/DiagnosticSemaKinds.td +++ b/clang/include/clang/Basic/DiagnosticSemaKinds.td @@ -6339,11 +6339,9 @@ def warn_c2y_compat_internal_in_extern_inline : Warning< "using static %select{function|variable}0 %1 in an inline function with " "external linkage is incompatible with standards before C2y">, InGroup<CPre2yCompat>, DefaultIgnore; -def warn_static_local_in_extern_inline - : ExtWarn<"non-constant static local variable in inline function may be " - "different " - "in different files">, - InGroup<StaticLocalInInline>; +def warn_static_local_in_extern_inline : ExtWarn< + "non-constant static local variable in inline function may be different " + "in different files">, InGroup<StaticLocalInInline>; def note_convert_inline_to_static : Note< "use 'static' to give inline function %0 internal linkage">; _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
