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