1 // RUN: %clang_cc1 -fms-extensions -fsyntax-only -verify -std=c++11 %s 2 // MSVC produces similar diagnostics. 3 4 __declspec(selectany) void foo() { } // expected-error{{'selectany' can only be applied to data items with external linkage}} 5 6 __declspec(selectany) int x1 = 1; 7 8 const __declspec(selectany) int x2 = 2; // expected-error{{'selectany' can only be applied to data items with external linkage}} 9 10 extern const __declspec(selectany) int x3 = 3; 11 12 extern const int x4; 13 const __declspec(selectany) int x4 = 4; 14 15 // MSDN says this is incorrect, but MSVC doesn't diagnose it. 16 extern __declspec(selectany) int x5; 17 18 static __declspec(selectany) int x6 = 2; // expected-error{{'selectany' can only be applied to data items with external linkage}} 19 20 // FIXME: MSVC accepts this and makes x7 externally visible and comdat, but keep 21 // it as internal and not weak/linkonce. 22 static int x7; // expected-note{{previous definition}} 23 extern __declspec(selectany) int x7; // expected-warning{{attribute declaration must precede definition}} 24 25 int asdf() { return x7; } 26 27 class X { 28 public: 29 X(int i) { i++; }; 30 int i; 31 }; 32 33 __declspec(selectany) X x(1); 34 35 namespace { class Internal {}; } 36 __declspec(selectany) auto x8 = Internal(); // expected-error {{'selectany' can only be applied to data items with external linkage}} 37