1 | // RUN: %clang_cc1 -O0 -emit-llvm -ftrapv -ftrap-function=mytrap %s -o - | FileCheck %s -check-prefix=TRAPFUNC |
2 | // RUN: %clang_cc1 -O0 -emit-llvm -ftrapv %s -o - | FileCheck %s -check-prefix=NOOPTION |
3 | |
4 | // TRAPFUNC-LABEL: define {{(dso_local )?}}void @{{_Z12test_builtinv|\"\?test_builtin@@YAXXZ\"}} |
5 | // TRAPFUNC: call void @llvm.trap() [[ATTR0:#[0-9]+]] |
6 | |
7 | // NOOPTION-LABEL: define {{(dso_local )?}}void @{{_Z12test_builtinv|\"\?test_builtin@@YAXXZ\"}} |
8 | // NOOPTION: call void @llvm.trap(){{$}} |
9 | |
10 | void test_builtin(void) { |
11 | __builtin_trap(); |
12 | } |
13 | |
14 | // TRAPFUNC-LABEL: define {{.*}}i32 @{{_Z13test_noreturnv|\"\?test_noreturn@@YAHXZ\"}} |
15 | // TRAPFUNC: call void @llvm.trap() [[ATTR0]] |
16 | |
17 | // NOOPTION-LABEL: define {{.*}}i32 @{{_Z13test_noreturnv|\"\?test_noreturn@@YAHXZ\"}} |
18 | // NOOPTION: call void @llvm.trap(){{$}} |
19 | |
20 | int test_noreturn(void) { |
21 | } |
22 | |
23 | // TRAPFUNC-LABEL: define {{.*}}i32 @{{_Z17test_add_overflowii|\"\?test_add_overflow@@YAHHH@Z\"}} |
24 | // TRAPFUNC: call void @llvm.trap() [[ATTR1:#[0-9]+]] |
25 | |
26 | // NOOPTION-LABEL: define {{.*}}i32 @{{_Z17test_add_overflowii|\"\?test_add_overflow@@YAHHH@Z\"}} |
27 | // NOOPTION: call void @llvm.trap() [[ATTR2:#[0-9]+]] |
28 | |
29 | int test_add_overflow(int a, int b) { |
30 | return a + b; |
31 | } |
32 | |
33 | // TRAPFUNC: attributes [[ATTR0]] = { {{.*}}"trap-func-name"="mytrap" } |
34 | // TRAPFUNC: attributes [[ATTR1]] = { {{.*}}"trap-func-name"="mytrap" } |
35 | |
36 | // NOOPTION-NOT: attributes [[ATTR2]] = { {{.*}}"trap-func-name"="mytrap" } |
37 | |