brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.9 KiB · 21cd44e Raw
80 lines · cpp
1// RUN: %clang_cc1 -triple x86_64-unknown-unknown -std=c++11 -emit-llvm -o - %s | FileCheck %s2 3__attribute__((internal_linkage)) void f() {}4// CHECK-DAG: define internal void @_ZL1fv5 6class A {7public:8  static int y __attribute__((internal_linkage));9  static int y2 [[clang::internal_linkage]];10// CHECK-DAG: @_ZN1A1yE = internal global11// CHECK-DAG: @_ZN1A2y2E = internal global12  void f1() __attribute__((internal_linkage));13// CHECK-DAG: define internal void @_ZN1A2f1Ev14  void f2() __attribute__((internal_linkage)) {}15// CHECK-DAG: define internal void @_ZN1A2f2Ev16  static void f4() __attribute__((internal_linkage)) {}17// CHECK-DAG: define internal void @_ZN1A2f4Ev18  A() __attribute__((internal_linkage)) {}19// CHECK-DAG: define internal void @_ZN1AC1Ev20// CHECK-DAG: define internal void @_ZN1AC2Ev21  ~A() __attribute__((internal_linkage)) {}22// CHECK-DAG: define internal void @_ZN1AD1Ev23// CHECK-DAG: define internal void @_ZN1AD2Ev24};25 26int A::y;27int A::y2;28 29void A::f1() {30}31 32// Forward declaration w/o an attribute.33class B;34 35// Internal_linkage on a class affects all its members.36class __attribute__((internal_linkage)) B {37public:38  B() {}39  // CHECK-DAG: define internal void @_ZNL1BC1Ev40  // CHECK-DAG: define internal void @_ZNL1BC2Ev41  ~B() {}42  // CHECK-DAG: define internal void @_ZNL1BD1Ev43  // CHECK-DAG: define internal void @_ZNL1BD2Ev44  void f() {};45  // CHECK-DAG: define internal void @_ZNL1B1fEv46  static int x;47  // CHECK-DAG: @_ZNL1B1xE = internal global48};49 50int B::x;51 52// Forward declaration with the attribute.53class __attribute__((internal_linkage)) C;54class C {55public:56  static int x;57  // CHECK-DAG: @_ZNL1C1xE = internal global58};59 60int C::x;61 62__attribute__((internal_linkage)) void g();63void g() {}64// CHECK-DAG: define internal void @_ZL1gv()65 66void use() {67  A a;68  a.f1();69  a.f2();70  A::f4();71  f();72  int &Y = A::y;73  int &Y2 = A::y2;74  B b;75  b.f();76  int &XX2 = B::x;77  g();78  int &XX3 = C::x;79}80