xref: /llvm-project/clang/test/CodeGen/noundef-analysis.cpp (revision 39db5e1ed87363a9ffea81e53520b542201b3262)
1*39db5e1eSNikita Popov // RUN: %clang_cc1 -triple arm64-darwin -enable-noundef-analysis -emit-llvm -o - %s | FileCheck %s -check-prefix ENABLED
2*39db5e1eSNikita Popov // RUN: %clang_cc1 -triple arm64-darwin -no-enable-noundef-analysis -emit-llvm -o - %s | FileCheck %s -check-prefix DISABLED
3b529744cShyeongyukim 
4b529744cShyeongyukim union u1 {
5b529744cShyeongyukim   int val;
6b529744cShyeongyukim };
7b529744cShyeongyukim 
8b529744cShyeongyukim struct s1 {
9b529744cShyeongyukim   int val;
10b529744cShyeongyukim };
11b529744cShyeongyukim 
indirect_callee_int(int a)12b529744cShyeongyukim int indirect_callee_int(int a) { return a; }
indirect_callee_union(union u1 a)13b529744cShyeongyukim union u1 indirect_callee_union(union u1 a) {
14b529744cShyeongyukim   return a;
15b529744cShyeongyukim }
16b529744cShyeongyukim 
17b529744cShyeongyukim static int sink;
18b529744cShyeongyukim 
examineValue(int x)19b529744cShyeongyukim static void examineValue(int x) { sink = x; }
20b529744cShyeongyukim 
21b529744cShyeongyukim // ENABLED-LABEL: @main(
225333447aShyeongyukim // ENABLED:    [[CALL:%.*]] = call noundef {{.*}}i32 @_Z19indirect_callee_inti(i32 noundef {{.*}}0)
2335baa267Shyeongyukim // ENABLED:    [[CALL1:%.*]] = call i32 @_Z21indirect_callee_union2u1(i64 {{.*}})
24*39db5e1eSNikita Popov // ENABLED:    [[CALL2:%.*]] = call noalias noundef nonnull ptr @_Znwm(i64 noundef 4) #[[ATTR4:[0-9]+]]
25b529744cShyeongyukim // ENABLED:    call void @_ZL12examineValuei(i32 noundef {{.*}})
26b529744cShyeongyukim // DISABLED-LABEL: @main(
275333447aShyeongyukim // DISABLED:    [[CALL:%.*]] = call {{.*}}i32 @_Z19indirect_callee_inti(i32 {{.*}}0)
2835baa267Shyeongyukim // DISABLED:    [[CALL1:%.*]] = call i32 @_Z21indirect_callee_union2u1(i64 {{.*}})
29*39db5e1eSNikita Popov // DISABLED:    [[CALL2:%.*]] = call noalias nonnull ptr @_Znwm(i64 4) #[[ATTR4:[0-9]+]]
30b529744cShyeongyukim // DISABLED:    call void @_ZL12examineValuei(i32 {{.*}})
main()31b529744cShyeongyukim int main() {
32b529744cShyeongyukim   indirect_callee_int(0);
33b529744cShyeongyukim   indirect_callee_union((union u1){0});
34b529744cShyeongyukim 
35b529744cShyeongyukim   auto s = new s1;
36b529744cShyeongyukim   examineValue(s->val);
37b529744cShyeongyukim 
38b529744cShyeongyukim   return 0;
39b529744cShyeongyukim }
40