|  | // 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; | 
|  | } |