82 lines · cpp
1// RUN: %clang_cc1 -triple x86_64-pc-linux -mrelocation-model static -O1 -disable-llvm-passes -emit-llvm %s -o - | FileCheck --check-prefix=STATIC %s2// RUN: %clang_cc1 -triple x86_64-pc-linux -mrelocation-model static -fno-plt -O1 -disable-llvm-passes -emit-llvm %s -o - | FileCheck --check-prefix=NOPLT %s3// RUN: %clang_cc1 -triple x86_64-w64-mingw32 -O1 -disable-llvm-passes -emit-llvm %s -o - | FileCheck --check-prefix=MINGW %s4// RUN: %clang_cc1 -triple x86_64-pc-cygwin -O1 -disable-llvm-passes -emit-llvm %s -o - | FileCheck --check-prefix=MINGW %s5 6// STATIC-DAG: @_ZTV1C = linkonce_odr dso_local unnamed_addr constant7// STATIC-DAG: @_ZTS1C = linkonce_odr dso_local constant8// STATIC-DAG: @_ZTI1C = linkonce_odr dso_local constant9// STATIC-DAG: @_ZZ14useStaticLocalvE3obj = linkonce_odr dso_local global10// STATIC-DAG: @_ZGVZN5guard1gEvE1a = linkonce_odr dso_local global11// STATIC-DAG: define dso_local void @_ZN1CC2Ev(12// STATIC-DAG: define dso_local void @_ZN1CC1Ev(13// STATIC-DAG: define linkonce_odr dso_local void @_ZN1C3fooEv(14 15// NOPLT-DAG: @_ZTV1C = linkonce_odr dso_local unnamed_addr constant16// NOPLT-DAG: @_ZTS1C = linkonce_odr dso_local constant17// NOPLT-DAG: @_ZTI1C = linkonce_odr dso_local constant18// NOPLT-DAG: @_ZZ14useStaticLocalvE3obj = linkonce_odr dso_local global19// NOPLT-DAG: @_ZGVZN5guard1gEvE1a = linkonce_odr dso_local global20// NOPLT-DAG: define dso_local void @_ZN1CC2Ev(21// NOPLT-DAG: define dso_local void @_ZN1CC1Ev(22// NOPLT-DAG: define linkonce_odr dso_local void @_ZN1C3fooEv(23 24// MINGW-DAG: @_ZTV1C = linkonce_odr dso_local unnamed_addr constant25// MINGW-DAG: @_ZTS1C = linkonce_odr dso_local constant26// MINGW-DAG: @_ZTI1C = linkonce_odr dso_local constant27// MINGW-DAG: @_ZZ14useStaticLocalvE3obj = linkonce_odr dso_local global28// MINGW-DAG: @_ZGVZN5guard1gEvE1a = linkonce_odr dso_local global29// MINGW-DAG: define dso_local void @_ZN1CC2Ev(30// MINGW-DAG: define dso_local void @_ZN1CC1Ev(31// MINGW-DAG: define linkonce_odr dso_local void @_ZN1C3fooEv(32 33struct C {34 C();35 virtual void foo() {}36};37C::C() {}38 39struct HasVTable {40 virtual void f();41};42inline HasVTable &useStaticLocal() {43 static HasVTable obj;44 return obj;45}46void useit() {47 useStaticLocal();48}49 50namespace guard {51int f();52inline int g() {53 static int a = f();54 return a;55}56int h() {57 return g();58}59} // namespace guard60 61 62// STATIC-DAG: @_ZN5test23barIiE1xE = available_externally dso_local constant i3263// STATIC-DAG: define available_externally dso_local void @_ZN5test23barIcEC1Ev(64// NOPLT-DAG: @_ZN5test23barIiE1xE = available_externally dso_local constant i3265// NOPLT-DAG: define available_externally void @_ZN5test23barIcEC1Ev(66// MINGW-DAG: @_ZN5test23barIiE1xE = available_externally constant i3267// MINGW-DAG: define available_externally dso_local void @_ZN5test23barIcEC1Ev(68namespace test2 {69void foo();70template <typename T>71struct bar {72 virtual void zed();73 static const int x = 42;74 bar() { foo(); }75};76extern template class bar<char>;77bar<char> abc;78const int *getX() {79 return &bar<int>::x;80}81} // namespace test282