// RUN: %clang_cc1 -triple x86_64-unknown-unknown -std=c++11 -emit-llvm -o - %s | FileCheck %s __attribute__((internal_linkage)) void f() {} // CHECK-DAG: define internal void @_ZL1fv class A { public: static int y __attribute__((internal_linkage)); static int y2 [[clang::internal_linkage]]; // CHECK-DAG: @_ZN1A1yE = internal global // CHECK-DAG: @_ZN1A2y2E = internal global void f1() __attribute__((internal_linkage)); // CHECK-DAG: define internal void @_ZN1A2f1Ev void f2() __attribute__((internal_linkage)) {} // CHECK-DAG: define internal void @_ZN1A2f2Ev static void f4() __attribute__((internal_linkage)) {} // CHECK-DAG: define internal void @_ZN1A2f4Ev A() __attribute__((internal_linkage)) {} // CHECK-DAG: define internal void @_ZN1AC1Ev // CHECK-DAG: define internal void @_ZN1AC2Ev ~A() __attribute__((internal_linkage)) {} // CHECK-DAG: define internal void @_ZN1AD1Ev // CHECK-DAG: define internal void @_ZN1AD2Ev }; int A::y; int A::y2; void A::f1() { } // Forward declaration w/o an attribute. class B; // Internal_linkage on a class affects all its members. class __attribute__((internal_linkage)) B { public: B() {} // CHECK-DAG: define internal void @_ZNL1BC1Ev // CHECK-DAG: define internal void @_ZNL1BC2Ev ~B() {} // CHECK-DAG: define internal void @_ZNL1BD1Ev // CHECK-DAG: define internal void @_ZNL1BD2Ev void f() {}; // CHECK-DAG: define internal void @_ZNL1B1fEv static int x; // CHECK-DAG: @_ZNL1B1xE = internal global }; int B::x; // Forward declaration with the attribute. class __attribute__((internal_linkage)) C; class C { public: static int x; // CHECK-DAG: @_ZNL1C1xE = internal global }; int C::x; __attribute__((internal_linkage)) void g(); void g() {} // CHECK-DAG: define internal void @_ZL1gv() void use() { A a; a.f1(); a.f2(); A::f4(); f(); int &Y = A::y; int &Y2 = A::y2; B b; b.f(); int &XX2 = B::x; g(); int &XX3 = C::x; }