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