diff options
Diffstat (limited to 'test/CodeGenCXX/mangle-lambdas.cpp')
| -rw-r--r-- | test/CodeGenCXX/mangle-lambdas.cpp | 91 | 
1 files changed, 37 insertions, 54 deletions
| diff --git a/test/CodeGenCXX/mangle-lambdas.cpp b/test/CodeGenCXX/mangle-lambdas.cpp index e8d3f1983d25..051cfdc3a221 100644 --- a/test/CodeGenCXX/mangle-lambdas.cpp +++ b/test/CodeGenCXX/mangle-lambdas.cpp @@ -1,9 +1,4 @@ -// RUN: %clang_cc1 -std=c++11 -triple x86_64-apple-macosx10.7.0 -emit-llvm -o - %s | FileCheck %s - -// CHECK: @_ZZNK7PR12917IJiiEE1nMUlvE_clEvE1n = linkonce_odr global i32 0 -// CHECK: @_ZZZN7PR12917IJicdEEC1EicdEd_NKUlvE_clEvE1n = linkonce_odr global i32 0 -// CHECK: @_ZZZN7PR12917IJicdEEC1EicdEd0_NKUlvE_clEvE1n = linkonce_odr global i32 0 -// CHECK: @_ZZZN7PR12917IJicdEEC1EicdEd1_NKUlvE_clEvE1n = linkonce_odr global i32 0 +// RUN: %clang_cc1 -std=c++11 -triple x86_64-apple-macosx10.7.0 -emit-llvm -o - %s -w | FileCheck %s  // CHECK-LABEL: define linkonce_odr void @_Z11inline_funci  inline void inline_func(int n) { @@ -133,23 +128,23 @@ int (*StaticMembers<T>::f)() = []{return 5;};  // CHECK: ret i32 2  template float StaticMembers<float>::x; -// CHECK-LABEL: define internal void @__cxx_global_var_init1() +// CHECK-LABEL: define internal void @__cxx_global_var_init.1()  // CHECK: call i32 @_ZNK13StaticMembersIfE1yMUlvE_clEv  // CHECK-LABEL: define linkonce_odr i32 @_ZNK13StaticMembersIfE1yMUlvE_clEv  // CHECK: ret i32 3  template float StaticMembers<float>::y; -// CHECK-LABEL: define internal void @__cxx_global_var_init2() +// CHECK-LABEL: define internal void @__cxx_global_var_init.2()  // CHECK: call i32 @_Z13accept_lambdaIN13StaticMembersIfE1zMUlvE_EEiT_  // CHECK: declare i32 @_Z13accept_lambdaIN13StaticMembersIfE1zMUlvE_EEiT_()  template float StaticMembers<float>::z; -// CHECK-LABEL: define internal void @__cxx_global_var_init3() +// CHECK-LABEL: define internal void @__cxx_global_var_init.3()  // CHECK: call {{.*}} @_ZNK13StaticMembersIfE1fMUlvE_cvPFivEEv  // CHECK-LABEL: define linkonce_odr i32 ()* @_ZNK13StaticMembersIfE1fMUlvE_cvPFivEEv  template int (*StaticMembers<float>::f)(); -// CHECK-LABEL: define internal void @__cxx_global_var_init4 +// CHECK-LABEL: define internal void @__cxx_global_var_init.4  // CHECK: call i32 @"_ZNK13StaticMembersIdE3$_2clEv"  // CHECK-LABEL: define internal i32 @"_ZNK13StaticMembersIdE3$_2clEv"  // CHECK: ret i32 42 @@ -164,23 +159,6 @@ void use_func_template() {    func_template<int>();  } - -template<typename...T> struct PR12917 { -  PR12917(T ...t = []{ static int n = 0; return ++n; }()); - -  static int n[3]; -}; -template<typename...T> int PR12917<T...>::n[3] = { -  []{ static int n = 0; return ++n; }() -}; - -// CHECK: call i32 @_ZZN7PR12917IJicdEEC1EicdEd1_NKUlvE_clEv( -// CHECK: call i32 @_ZZN7PR12917IJicdEEC1EicdEd0_NKUlvE_clEv( -// CHECK: call i32 @_ZZN7PR12917IJicdEEC1EicdEd_NKUlvE_clEv( -// CHECK: call void @_ZN7PR12917IJicdEEC1Eicd( -PR12917<int, char, double> pr12917; -int *pr12917_p = PR12917<int, int>::n; -  namespace std {    struct type_info;  } @@ -192,8 +170,40 @@ namespace PR12123 {    };    void B::h() { f(); }  } +  // CHECK-LABEL: define linkonce_odr dereferenceable({{[0-9]+}}) %"struct.PR12123::A"* @_ZZN7PR121231B1fERKSt9type_infoEd_NKUlvE_clEv +// Check linkage of the various lambdas. +// CHECK-LABEL: define linkonce_odr i32 @_ZZ11inline_funciENKUlvE_clEv +// CHECK: ret i32 1 +// CHECK-LABEL: define linkonce_odr i32 @_ZZ11inline_funciENKUlvE0_clEv +// CHECK: ret i32 +// CHECK-LABEL: define linkonce_odr double @_ZZ11inline_funciENKUlvE1_clEv +// CHECK: ret double +// CHECK-LABEL: define linkonce_odr i32 @_ZZ11inline_funciENKUliE_clEi +// CHECK: ret i32 +// CHECK-LABEL: define linkonce_odr i32 @_ZZ11inline_funciENKUlvE2_clEv +// CHECK: ret i32 17 + +// CHECK-LABEL: define linkonce_odr void @_ZN7MembersC2Ev +// CHECK: call i32 @_ZNK7Members1xMUlvE_clEv +// CHECK-NEXT: call i32 @_ZNK7Members1xMUlvE0_clE +// CHECK-NEXT: add nsw i32 +// CHECK: call i32 @_ZNK7Members1yMUlvE_clEv +// CHECK: ret void + + +// Check the linkage of the lambdas used in test_Members. +// CHECK-LABEL: define linkonce_odr i32 @_ZNK7Members1xMUlvE_clEv +// CHECK: ret i32 1 +// CHECK-LABEL: define linkonce_odr i32 @_ZNK7Members1xMUlvE0_clEv +// CHECK: ret i32 2 +// CHECK-LABEL: define linkonce_odr i32 @_ZNK7Members1yMUlvE_clEv +// CHECK: ret i32 3 + +// CHECK-LABEL: define linkonce_odr void @_Z1fIZZNK23TestNestedInstantiationclEvENKUlvE_clEvEUlvE_EvT_ + +  namespace PR12808 {    template <typename> struct B {      int a; @@ -209,7 +219,6 @@ namespace PR12808 {    // CHECK-LABEL: define linkonce_odr i32 @_ZZZN7PR128081bIiEEviENKUlvE_clEvENKUlvE_clEv  } -// CHECK-LABEL: define linkonce_odr void @_Z1fIZZNK23TestNestedInstantiationclEvENKUlvE_clEvEUlvE_EvT_  struct Members {    int x = [] { return 1; }() + [] { return 2; }(); @@ -217,13 +226,7 @@ struct Members {  };  void test_Members() { -  // CHECK-LABEL: define linkonce_odr void @_ZN7MembersC2Ev -  // CHECK: call i32 @_ZNK7Members1xMUlvE_clEv -  // CHECK-NEXT: call i32 @_ZNK7Members1xMUlvE0_clE -  // CHECK-NEXT: add nsw i32 -  // CHECK: call i32 @_ZNK7Members1yMUlvE_clEv    Members members; -  // CHECK: ret void  }  template<typename P> void f(P) { } @@ -239,23 +242,3 @@ struct TestNestedInstantiation {  void test_NestedInstantiation() {    TestNestedInstantiation()();  } - -// Check the linkage of the lambdas used in test_Members. -// CHECK-LABEL: define linkonce_odr i32 @_ZNK7Members1xMUlvE_clEv -// CHECK: ret i32 1 -// CHECK-LABEL: define linkonce_odr i32 @_ZNK7Members1xMUlvE0_clEv -// CHECK: ret i32 2 -// CHECK-LABEL: define linkonce_odr i32 @_ZNK7Members1yMUlvE_clEv -// CHECK: ret i32 3 - -// Check linkage of the various lambdas. -// CHECK-LABEL: define linkonce_odr i32 @_ZZ11inline_funciENKUlvE_clEv -// CHECK: ret i32 1 -// CHECK-LABEL: define linkonce_odr i32 @_ZZ11inline_funciENKUlvE0_clEv -// CHECK: ret i32 -// CHECK-LABEL: define linkonce_odr double @_ZZ11inline_funciENKUlvE1_clEv -// CHECK: ret double -// CHECK-LABEL: define linkonce_odr i32 @_ZZ11inline_funciENKUliE_clEi -// CHECK: ret i32 -// CHECK-LABEL: define linkonce_odr i32 @_ZZ11inline_funciENKUlvE2_clEv -// CHECK: ret i32 17 | 
