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 8const __declspec(selectany) int x2 = 2; // expected-error{{'selectany' can only be applied to data items with external linkage}} 9 10extern const __declspec(selectany) int x3 = 3; 11 12extern const int x4; 13const __declspec(selectany) int x4 = 4; 14 15// MSDN says this is incorrect, but MSVC doesn't diagnose it. 16extern __declspec(selectany) int x5; 17 18static __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. 22static int x7; // expected-note{{previous definition}} 23extern __declspec(selectany) int x7; // expected-warning{{attribute declaration must precede definition}} 24 25int asdf() { return x7; } 26 27class X { 28 public: 29 X(int i) { i++; }; 30 int i; 31}; 32 33__declspec(selectany) X x(1); 34 35namespace { class Internal {}; } 36__declspec(selectany) auto x8 = Internal(); // expected-error {{'selectany' can only be applied to data items with external linkage}} 37