196e7813f08c6adf1d8657b0da86741b54e850fd7Rafael Espindola// RUN: not %clang_cc1 -std=c++11 -emit-llvm %s -o - -verify -fexceptions -fcxx-exceptions -triple x86_64-linux-gnu | FileCheck %s 2e6975e9b0985ad7f7ff9187e38d95bfe9ac4181bRichard Smith 387162c2e528921aabb84e96fe7272348a4b3354eRichard Smithvoid h(); 487162c2e528921aabb84e96fe7272348a4b3354eRichard Smith 587162c2e528921aabb84e96fe7272348a4b3354eRichard Smithtemplate<typename T> void f() noexcept(sizeof(T) == 4) { h(); } 613bffc532bafd45d4a77867993c1afb83c7661beRichard Smithtemplate<typename T> void g() noexcept(sizeof(T) == 4); 787162c2e528921aabb84e96fe7272348a4b3354eRichard Smith 887162c2e528921aabb84e96fe7272348a4b3354eRichard Smithtemplate<typename T> struct S { 987162c2e528921aabb84e96fe7272348a4b3354eRichard Smith static void f() noexcept(sizeof(T) == 4) { h(); } 1013bffc532bafd45d4a77867993c1afb83c7661beRichard Smith static void g() noexcept(sizeof(T) == 4); 1187162c2e528921aabb84e96fe7272348a4b3354eRichard Smith}; 1287162c2e528921aabb84e96fe7272348a4b3354eRichard Smith 13be9e8bfef6ee7f81ea30e9d358101b4f8d560c6bBill Wendling// CHECK: define {{.*}} @_Z1fIsEvv() [[NONE:#[0-9]+]] { 1487162c2e528921aabb84e96fe7272348a4b3354eRichard Smithtemplate<> void f<short>() { h(); } 15899245792776dd219a3c36eb19b42272e270bc0cBill Wendling// CHECK: define {{.*}} @_Z1fIA2_sEvv() [[NUW:#[0-9]+]] { 1687162c2e528921aabb84e96fe7272348a4b3354eRichard Smithtemplate<> void f<short[2]>() noexcept { h(); } 1787162c2e528921aabb84e96fe7272348a4b3354eRichard Smith 1887162c2e528921aabb84e96fe7272348a4b3354eRichard Smith// CHECK: define {{.*}} @_ZN1SIsE1fEv() 19899245792776dd219a3c36eb19b42272e270bc0cBill Wendling// CHECK-NOT: [[NUW]] 2087162c2e528921aabb84e96fe7272348a4b3354eRichard Smithtemplate<> void S<short>::f() { h(); } 21899245792776dd219a3c36eb19b42272e270bc0cBill Wendling// CHECK: define {{.*}} @_ZN1SIA2_sE1fEv() [[NUW]] 2287162c2e528921aabb84e96fe7272348a4b3354eRichard Smithtemplate<> void S<short[2]>::f() noexcept { h(); } 2387162c2e528921aabb84e96fe7272348a4b3354eRichard Smith 24be9e8bfef6ee7f81ea30e9d358101b4f8d560c6bBill Wendling// CHECK: define {{.*}} @_Z1fIDsEvv() [[NONE]] { 2587162c2e528921aabb84e96fe7272348a4b3354eRichard Smithtemplate void f<char16_t>(); 26899245792776dd219a3c36eb19b42272e270bc0cBill Wendling// CHECK: define {{.*}} @_Z1fIA2_DsEvv() [[NUW]] { 2787162c2e528921aabb84e96fe7272348a4b3354eRichard Smithtemplate void f<char16_t[2]>(); 2887162c2e528921aabb84e96fe7272348a4b3354eRichard Smith 2987162c2e528921aabb84e96fe7272348a4b3354eRichard Smith// CHECK: define {{.*}} @_ZN1SIDsE1fEv() 30899245792776dd219a3c36eb19b42272e270bc0cBill Wendling// CHECK-NOT: [[NUW]] 3187162c2e528921aabb84e96fe7272348a4b3354eRichard Smithtemplate void S<char16_t>::f(); 32899245792776dd219a3c36eb19b42272e270bc0cBill Wendling// CHECK: define {{.*}} @_ZN1SIA2_DsE1fEv() [[NUW]] 3387162c2e528921aabb84e96fe7272348a4b3354eRichard Smithtemplate void S<char16_t[2]>::f(); 34e6975e9b0985ad7f7ff9187e38d95bfe9ac4181bRichard Smith 3513bffc532bafd45d4a77867993c1afb83c7661beRichard Smithvoid h() { 36899245792776dd219a3c36eb19b42272e270bc0cBill Wendling // CHECK: define {{.*}} @_Z1fIiEvv() [[NUW]] { 37e6975e9b0985ad7f7ff9187e38d95bfe9ac4181bRichard Smith f<int>(); 38be9e8bfef6ee7f81ea30e9d358101b4f8d560c6bBill Wendling // CHECK: define {{.*}} @_Z1fIA2_iEvv() [[NONE]] { 39e6975e9b0985ad7f7ff9187e38d95bfe9ac4181bRichard Smith f<int[2]>(); 4087162c2e528921aabb84e96fe7272348a4b3354eRichard Smith 41899245792776dd219a3c36eb19b42272e270bc0cBill Wendling // CHECK: define {{.*}} @_ZN1SIiE1fEv() [[NUW]] 4287162c2e528921aabb84e96fe7272348a4b3354eRichard Smith S<int>::f(); 4387162c2e528921aabb84e96fe7272348a4b3354eRichard Smith // CHECK: define {{.*}} @_ZN1SIA2_iE1fEv() 44899245792776dd219a3c36eb19b42272e270bc0cBill Wendling // CHECK-NOT: [[NUW]] 4587162c2e528921aabb84e96fe7272348a4b3354eRichard Smith S<int[2]>::f(); 4687162c2e528921aabb84e96fe7272348a4b3354eRichard Smith 47899245792776dd219a3c36eb19b42272e270bc0cBill Wendling // CHECK: define {{.*}} @_Z1fIfEvv() [[NUW]] { 48e6975e9b0985ad7f7ff9187e38d95bfe9ac4181bRichard Smith void (*f1)() = &f<float>; 49be9e8bfef6ee7f81ea30e9d358101b4f8d560c6bBill Wendling // CHECK: define {{.*}} @_Z1fIdEvv() [[NONE]] { 50e6975e9b0985ad7f7ff9187e38d95bfe9ac4181bRichard Smith void (*f2)() = &f<double>; 5187162c2e528921aabb84e96fe7272348a4b3354eRichard Smith 52899245792776dd219a3c36eb19b42272e270bc0cBill Wendling // CHECK: define {{.*}} @_ZN1SIfE1fEv() [[NUW]] 5387162c2e528921aabb84e96fe7272348a4b3354eRichard Smith void (*f3)() = &S<float>::f; 5487162c2e528921aabb84e96fe7272348a4b3354eRichard Smith // CHECK: define {{.*}} @_ZN1SIdE1fEv() 55899245792776dd219a3c36eb19b42272e270bc0cBill Wendling // CHECK-NOT: [[NUW]] 5687162c2e528921aabb84e96fe7272348a4b3354eRichard Smith void (*f4)() = &S<double>::f; 5787162c2e528921aabb84e96fe7272348a4b3354eRichard Smith 58899245792776dd219a3c36eb19b42272e270bc0cBill Wendling // CHECK: define {{.*}} @_Z1fIA4_cEvv() [[NUW]] { 59e6975e9b0985ad7f7ff9187e38d95bfe9ac4181bRichard Smith (void)&f<char[4]>; 60be9e8bfef6ee7f81ea30e9d358101b4f8d560c6bBill Wendling // CHECK: define {{.*}} @_Z1fIcEvv() [[NONE]] { 61e6975e9b0985ad7f7ff9187e38d95bfe9ac4181bRichard Smith (void)&f<char>; 6287162c2e528921aabb84e96fe7272348a4b3354eRichard Smith 63899245792776dd219a3c36eb19b42272e270bc0cBill Wendling // CHECK: define {{.*}} @_ZN1SIA4_cE1fEv() [[NUW]] 6487162c2e528921aabb84e96fe7272348a4b3354eRichard Smith (void)&S<char[4]>::f; 6587162c2e528921aabb84e96fe7272348a4b3354eRichard Smith // CHECK: define {{.*}} @_ZN1SIcE1fEv() 66899245792776dd219a3c36eb19b42272e270bc0cBill Wendling // CHECK-NOT: [[NUW]] 6787162c2e528921aabb84e96fe7272348a4b3354eRichard Smith (void)&S<char>::f; 68e6975e9b0985ad7f7ff9187e38d95bfe9ac4181bRichard Smith} 6913bffc532bafd45d4a77867993c1afb83c7661beRichard Smith 7013bffc532bafd45d4a77867993c1afb83c7661beRichard Smith// CHECK: define {{.*}} @_Z1iv 7113bffc532bafd45d4a77867993c1afb83c7661beRichard Smithvoid i() { 72899245792776dd219a3c36eb19b42272e270bc0cBill Wendling // CHECK: declare {{.*}} @_Z1gIiEvv() [[NUW]] 7313bffc532bafd45d4a77867993c1afb83c7661beRichard Smith g<int>(); 7413bffc532bafd45d4a77867993c1afb83c7661beRichard Smith // CHECK: declare {{.*}} @_Z1gIA2_iEvv() 75899245792776dd219a3c36eb19b42272e270bc0cBill Wendling // CHECK-NOT: [[NUW]] 7613bffc532bafd45d4a77867993c1afb83c7661beRichard Smith g<int[2]>(); 7713bffc532bafd45d4a77867993c1afb83c7661beRichard Smith 78899245792776dd219a3c36eb19b42272e270bc0cBill Wendling // CHECK: declare {{.*}} @_ZN1SIiE1gEv() [[NUW]] 7913bffc532bafd45d4a77867993c1afb83c7661beRichard Smith S<int>::g(); 8013bffc532bafd45d4a77867993c1afb83c7661beRichard Smith // CHECK: declare {{.*}} @_ZN1SIA2_iE1gEv() 81899245792776dd219a3c36eb19b42272e270bc0cBill Wendling // CHECK-NOT: [[NUW]] 8213bffc532bafd45d4a77867993c1afb83c7661beRichard Smith S<int[2]>::g(); 8313bffc532bafd45d4a77867993c1afb83c7661beRichard Smith 84899245792776dd219a3c36eb19b42272e270bc0cBill Wendling // CHECK: declare {{.*}} @_Z1gIfEvv() [[NUW]] 8513bffc532bafd45d4a77867993c1afb83c7661beRichard Smith void (*g1)() = &g<float>; 8613bffc532bafd45d4a77867993c1afb83c7661beRichard Smith // CHECK: declare {{.*}} @_Z1gIdEvv() 87899245792776dd219a3c36eb19b42272e270bc0cBill Wendling // CHECK-NOT: [[NUW]] 8813bffc532bafd45d4a77867993c1afb83c7661beRichard Smith void (*g2)() = &g<double>; 8913bffc532bafd45d4a77867993c1afb83c7661beRichard Smith 90899245792776dd219a3c36eb19b42272e270bc0cBill Wendling // CHECK: declare {{.*}} @_ZN1SIfE1gEv() [[NUW]] 9113bffc532bafd45d4a77867993c1afb83c7661beRichard Smith void (*g3)() = &S<float>::g; 9213bffc532bafd45d4a77867993c1afb83c7661beRichard Smith // CHECK: declare {{.*}} @_ZN1SIdE1gEv() 93899245792776dd219a3c36eb19b42272e270bc0cBill Wendling // CHECK-NOT: [[NUW]] 9413bffc532bafd45d4a77867993c1afb83c7661beRichard Smith void (*g4)() = &S<double>::g; 9513bffc532bafd45d4a77867993c1afb83c7661beRichard Smith 96899245792776dd219a3c36eb19b42272e270bc0cBill Wendling // CHECK: declare {{.*}} @_Z1gIA4_cEvv() [[NUW]] 9713bffc532bafd45d4a77867993c1afb83c7661beRichard Smith (void)&g<char[4]>; 9813bffc532bafd45d4a77867993c1afb83c7661beRichard Smith // CHECK: declare {{.*}} @_Z1gIcEvv() 99899245792776dd219a3c36eb19b42272e270bc0cBill Wendling // CHECK-NOT: [[NUW]] 10013bffc532bafd45d4a77867993c1afb83c7661beRichard Smith (void)&g<char>; 10113bffc532bafd45d4a77867993c1afb83c7661beRichard Smith 102899245792776dd219a3c36eb19b42272e270bc0cBill Wendling // CHECK: declare {{.*}} @_ZN1SIA4_cE1gEv() [[NUW]] 10313bffc532bafd45d4a77867993c1afb83c7661beRichard Smith (void)&S<char[4]>::g; 10413bffc532bafd45d4a77867993c1afb83c7661beRichard Smith // CHECK: declare {{.*}} @_ZN1SIcE1gEv() 105899245792776dd219a3c36eb19b42272e270bc0cBill Wendling // CHECK-NOT: [[NUW]] 10613bffc532bafd45d4a77867993c1afb83c7661beRichard Smith (void)&S<char>::g; 10713bffc532bafd45d4a77867993c1afb83c7661beRichard Smith} 10813bffc532bafd45d4a77867993c1afb83c7661beRichard Smith 10913bffc532bafd45d4a77867993c1afb83c7661beRichard Smithtemplate<typename T> struct Nested { 11013bffc532bafd45d4a77867993c1afb83c7661beRichard Smith template<bool b, typename U> void f() noexcept(sizeof(T) == sizeof(U)); 11113bffc532bafd45d4a77867993c1afb83c7661beRichard Smith}; 11213bffc532bafd45d4a77867993c1afb83c7661beRichard Smith 11313bffc532bafd45d4a77867993c1afb83c7661beRichard Smith// CHECK: define {{.*}} @_Z1jv 11413bffc532bafd45d4a77867993c1afb83c7661beRichard Smithvoid j() { 11513bffc532bafd45d4a77867993c1afb83c7661beRichard Smith // CHECK: declare {{.*}} @_ZN6NestedIiE1fILb1EcEEvv( 116899245792776dd219a3c36eb19b42272e270bc0cBill Wendling // CHECK-NOT: [[NUW]] 11713bffc532bafd45d4a77867993c1afb83c7661beRichard Smith Nested<int>().f<true, char>(); 118899245792776dd219a3c36eb19b42272e270bc0cBill Wendling // CHECK: declare {{.*}} @_ZN6NestedIlE1fILb0ElEEvv({{.*}}) [[NUW]] 11913bffc532bafd45d4a77867993c1afb83c7661beRichard Smith Nested<long>().f<false, long>(); 12013bffc532bafd45d4a77867993c1afb83c7661beRichard Smith} 121f7a9da053f5bd6c18450c1796d953b42c3b7ad3aBill Wendling 122be9e8bfef6ee7f81ea30e9d358101b4f8d560c6bBill Wendling// CHECK: attributes [[NONE]] = { {{.*}} } 123be9e8bfef6ee7f81ea30e9d358101b4f8d560c6bBill Wendling// CHECK: attributes [[NUW]] = { nounwind{{.*}} } 124