1*67e74705SXin Li // RUN: %clang_cc1 -std=c++11 -fsyntax-only -verify %s 2*67e74705SXin Li 3*67e74705SXin Li int f() __attribute__((internal_linkage)); 4*67e74705SXin Li 5*67e74705SXin Li class A; 6*67e74705SXin Li class __attribute__((internal_linkage)) A { 7*67e74705SXin Li public: 8*67e74705SXin Li int x __attribute__((internal_linkage)); // expected-warning{{'internal_linkage' attribute only applies to variables, functions and classes}} 9*67e74705SXin Li static int y __attribute__((internal_linkage)); 10*67e74705SXin Li void f1() __attribute__((internal_linkage)); f2()11*67e74705SXin Li void f2() __attribute__((internal_linkage)) {} f3()12*67e74705SXin Li static void f3() __attribute__((internal_linkage)) {} 13*67e74705SXin Li void f4(); // expected-note{{previous definition is here}} 14*67e74705SXin Li static int zz; // expected-note{{previous definition is here}} A()15*67e74705SXin Li A() __attribute__((internal_linkage)) {} ~A()16*67e74705SXin Li ~A() __attribute__((internal_linkage)) {} operator =(const A &)17*67e74705SXin Li A& operator=(const A&) __attribute__((internal_linkage)) { return *this; } 18*67e74705SXin Li struct { 19*67e74705SXin Li int z __attribute__((internal_linkage)); // expected-warning{{'internal_linkage' attribute only applies to variables, functions and classes}} 20*67e74705SXin Li }; 21*67e74705SXin Li }; 22*67e74705SXin Li f4()23*67e74705SXin Li__attribute__((internal_linkage)) void A::f4() {} // expected-error{{'internal_linkage' attribute does not appear on the first declaration of 'f4'}} 24*67e74705SXin Li 25*67e74705SXin Li __attribute__((internal_linkage)) int A::zz; // expected-error{{'internal_linkage' attribute does not appear on the first declaration of 'zz'}} 26*67e74705SXin Li 27*67e74705SXin Li namespace Z __attribute__((internal_linkage)) { // expected-warning{{'internal_linkage' attribute only applies to variables, functions and classes}} 28*67e74705SXin Li } 29*67e74705SXin Li g()30*67e74705SXin Li__attribute__((internal_linkage("foo"))) int g() {} // expected-error{{'internal_linkage' attribute takes no arguments}} 31*67e74705SXin Li h()32*67e74705SXin Li[[clang::internal_linkage]] int h() {} 33*67e74705SXin Li 34*67e74705SXin Li enum struct __attribute__((internal_linkage)) E { // expected-warning{{'internal_linkage' attribute only applies to variables, functions and classes}} 35*67e74705SXin Li a = 1, 36*67e74705SXin Li b = 2 37*67e74705SXin Li }; 38*67e74705SXin Li 39*67e74705SXin Li int A::y; 40*67e74705SXin Li f1()41*67e74705SXin Livoid A::f1() { 42*67e74705SXin Li } 43*67e74705SXin Li g(int a)44*67e74705SXin Livoid g(int a [[clang::internal_linkage]]) { // expected-warning{{'internal_linkage' attribute only applies to variables, functions and classes}} 45*67e74705SXin Li int x [[clang::internal_linkage]]; // expected-warning{{'internal_linkage' attribute on a non-static local variable is ignored}} 46*67e74705SXin Li static int y [[clang::internal_linkage]]; 47*67e74705SXin Li } 48