[clang] [Clang] disallow selectany on non-global-variable declarations (PR #189641)

Aaron Ballman via cfe-commits cfe-commits at lists.llvm.org
Wed Apr 29 04:15:47 PDT 2026


================
@@ -53,3 +53,14 @@ extern const SomeStruct some_struct;
 
 // Without selectany, this should stay an error.
 const SomeStruct some_struct2; // expected-error {{default initialization of an object of const type 'const SomeStruct' without a user-provided default constructor}}
+
+struct __declspec(selectany) S1 {}; // expected-error {{'selectany' attribute only applies to global variables}}
+__declspec(selectany) struct S1 s1;
+
+void t() {
+  __declspec(selectany) int x; // expected-error {{'selectany' attribute only applies to global variables}}
+  __declspec(selectany) extern int y;
+}
+
+struct S2 {};
+struct __declspec(selectany) S2 s2; // expected-error {{'selectany' attribute only applies to global variables}}
----------------
AaronBallman wrote:

We heard back from Microsoft (full explanation in the link above), the gist is:

1) we should diagnose `static` and `thread_local` local variables
2) we should reject on static data members
3) `selectany` only applies when there is external linkage, no exceptions mentioned

https://github.com/llvm/llvm-project/pull/189641


More information about the cfe-commits mailing list