xref: /minix3/external/bsd/llvm/dist/clang/test/CodeGenCXX/split-stacks.cpp (revision 0a6a1f1d05b60e214de2f05a7310ddd1f0e590e7)
1*0a6a1f1dSLionel Sambuc // RUN: %clang -target x86_64-linux-gnu -fsplit-stack -S -std=c++11 %s -emit-llvm -o - | FileCheck -check-prefix=CHECK-SEGSTK %s
2*0a6a1f1dSLionel Sambuc // RUN: %clang -target x86_64-linux-gnu -S -std=c++11 %s -emit-llvm -o - | FileCheck -check-prefix=CHECK-NOSEGSTK %s
3*0a6a1f1dSLionel Sambuc 
foo()4*0a6a1f1dSLionel Sambuc int foo() {
5*0a6a1f1dSLionel Sambuc   return 0;
6*0a6a1f1dSLionel Sambuc }
7*0a6a1f1dSLionel Sambuc 
8*0a6a1f1dSLionel Sambuc template <typename T>
9*0a6a1f1dSLionel Sambuc [[gnu::no_split_stack]]
tnosplit()10*0a6a1f1dSLionel Sambuc int tnosplit() {
11*0a6a1f1dSLionel Sambuc   return 0;
12*0a6a1f1dSLionel Sambuc }
13*0a6a1f1dSLionel Sambuc 
14*0a6a1f1dSLionel Sambuc [[gnu::no_split_stack]]
nosplit()15*0a6a1f1dSLionel Sambuc int nosplit() {
16*0a6a1f1dSLionel Sambuc   return tnosplit<int>();
17*0a6a1f1dSLionel Sambuc }
18*0a6a1f1dSLionel Sambuc 
19*0a6a1f1dSLionel Sambuc // CHECK-SEGSTK: define i32 @_Z3foov() [[SS:#[0-9]+]] {
20*0a6a1f1dSLionel Sambuc // CHECK-SEGSTK: define i32 @_Z7nosplitv() [[NSS1:#[0-9]+]] {
21*0a6a1f1dSLionel Sambuc // CHECK-SEGSTK: define linkonce_odr i32 @_Z8tnosplitIiEiv() [[NSS2:#[0-9]+]] {
22*0a6a1f1dSLionel Sambuc // CHECK-SEGSTK-NOT: [[NSS1]] = { {{.*}} "split-stack" {{.*}} }
23*0a6a1f1dSLionel Sambuc // CHECK-SEGSTK-NOT: [[NSS2]] = { {{.*}} "split-stack" {{.*}} }
24*0a6a1f1dSLionel Sambuc // CHECK-SEGSTK: [[SS]] = { {{.*}} "split-stack" {{.*}} }
25*0a6a1f1dSLionel Sambuc // CHECK-SEGSTK-NOT: [[NSS1]] = { {{.*}} "split-stack" {{.*}} }
26*0a6a1f1dSLionel Sambuc // CHECK-SEGSTK-NOT: [[NSS2]] = { {{.*}} "split-stack" {{.*}} }
27*0a6a1f1dSLionel Sambuc 
28*0a6a1f1dSLionel Sambuc // CHECK-NOSEGSTK: define i32 @_Z3foov() [[NSS0:#[0-9]+]] {
29*0a6a1f1dSLionel Sambuc // CHECK-NOSEGSTK: define i32 @_Z7nosplitv() [[NSS1:#[0-9]+]] {
30*0a6a1f1dSLionel Sambuc // CHECK-NOSEGSTK: define linkonce_odr i32 @_Z8tnosplitIiEiv() [[NSS2:#[0-9]+]] {
31*0a6a1f1dSLionel Sambuc // CHECK-NOSEGSTK-NOT: [[NSS1]] = { {{.*}} "split-stack" {{.*}} }
32*0a6a1f1dSLionel Sambuc // CHECK-NOSEGSTK-NOT: [[NSS2]] = { {{.*}} "split-stack" {{.*}} }
33*0a6a1f1dSLionel Sambuc // CHECK-NOSEGSTK-NOT: [[NSS3]] = { {{.*}} "split-stack" {{.*}} }
34