brintos

brintos / llvm-project-archived public Read only

0
0
Text · 14.3 KiB · 249cf56 Raw
273 lines · c
1// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --version 52// RUN: %clang_cc1 -triple x86_64-apple-darwin -O1 -disable-llvm-passes -no-pointer-tbaa %s -emit-llvm -o - | FileCheck --check-prefixes=COMMON,DISABLE %s3// RUN: %clang_cc1 -triple x86_64-apple-darwin -O1 -disable-llvm-passes %s -emit-llvm -o - | FileCheck --check-prefixes=COMMON,DEFAULT %s4 5void p2unsigned(unsigned **ptr) {6  // COMMON-LABEL: define void @p2unsigned(7  // COMMON-SAME:    ptr noundef [[PTR:%.+]])8  // COMMON:        [[PTR_ADDR:%.+]] = alloca ptr, align 89  // DEFAULT-NEXT:  store ptr [[PTR]], ptr [[PTR_ADDR]], align 8, !tbaa [[TBAA6:![0-9]+]]10  // DEFAULT-NEXT:  [[TMP0:%.*]] = load ptr, ptr [[PTR_ADDR]], align 8, !tbaa [[TBAA6]]11  // DEFAULT-NEXT:  store ptr null, ptr [[TMP0]], align 8, !tbaa [[TBAA10:![0-9]+]]12  // DISABLE-NEXT:  store ptr [[PTR]], ptr [[PTR_ADDR]], align 8, !tbaa [[TBAA6:![0-9]+]]13  // DISABLE-NEXT:  [[TMP0:%.*]] = load ptr, ptr [[PTR_ADDR]], align 8, !tbaa [[TBAA6]]14  // DISABLE-NEXT:  store ptr null, ptr [[TMP0]], align 8, !tbaa [[TBAA6]]15  // COMMON-NEXT:   ret void16  //17  *ptr = 0;18}19 20void p2unsigned_volatile(unsigned *volatile *ptr) {21  // COMMON-LABEL: define void @p2unsigned_volatile(22  // COMMON-SAME:    ptr noundef [[PTR:%.+]])23  // COMMON:         [[PTR_ADDR:%.+]] = alloca ptr, align 824  // DEFAULT-NEXT:   store ptr [[PTR]], ptr [[PTR_ADDR]], align 8, !tbaa [[TBAA6]]25  // DEFAULT-NEXT:   [[TMP0:%.*]] = load ptr, ptr [[PTR_ADDR]], align 8, !tbaa [[TBAA6]]26  // DEFAULT-NEXT:   store volatile ptr null, ptr [[TMP0]], align 8, !tbaa [[TBAA10]]27  // DISABLE-NEXT:   store ptr [[PTR]], ptr [[PTR_ADDR]], align 8, !tbaa [[TBAA6]]28  // DISABLE-NEXT:   [[TMP0:%.*]] = load ptr, ptr [[PTR_ADDR]], align 8, !tbaa [[TBAA6]]29  // DISABLE-NEXT:   store volatile ptr null, ptr [[TMP0]], align 8, !tbaa [[TBAA6]]30  // COMMON-NEXT:    ret void31  //32  *ptr = 0;33}34 35void p3int(int ***ptr) {36  // COMMON-LABEL: define void @p3int(37  // COMMON-SAME:    ptr noundef [[PTR:%.+]])38  // COMMON:         [[PTR_ADDR:%.+]] = alloca ptr, align 839  // DEFAULT-NEXT:   store ptr [[PTR]], ptr [[PTR_ADDR]], align 8, !tbaa [[TBAA12:![0-9]+]]40  // DEFAULT-NEXT:   [[TMP0:%.*]] = load ptr, ptr [[PTR_ADDR]], align 8, !tbaa [[TBAA12]]41  // DEFAULT-NEXT:   [[TMP1:%.*]] = load ptr, ptr [[TMP0]], align 8, !tbaa [[TBAA6]]42  // DEFAULT-NEXT:   store ptr null, ptr [[TMP1]], align 8, !tbaa [[TBAA10]]43  // DISABLE-NEXT:   store ptr [[PTR]], ptr [[PTR_ADDR]], align 8, !tbaa [[TBAA6]]44  // DISABLE-NEXT:   [[TMP0:%.*]] = load ptr, ptr [[PTR_ADDR]], align 8, !tbaa [[TBAA6]]45  // DISABLE-NEXT:   [[TMP1:%.*]] = load ptr, ptr [[TMP0]], align 8, !tbaa [[TBAA6]]46  // DISABLE-NEXT:   store ptr null, ptr [[TMP1]], align 8, !tbaa [[TBAA6]]47  // COMMON-NEXT:    ret void48  //49  **ptr = 0;50}51 52void p4char(char ****ptr) {53  // COMMON-LABEL: define void @p4char(54  // COMMON-SAME:    ptr noundef [[PTR:%.+]])55  // COMMON:         [[PTR_ADDR:%.+]] = alloca ptr, align 856  // DEFAULT-NEXT:   store ptr [[PTR]], ptr [[PTR_ADDR]], align 8, !tbaa [[TBAA15:![0-9]+]]57  // DEFAULT-NEXT:   [[TMP0:%.*]] = load ptr, ptr [[PTR_ADDR]], align 8, !tbaa [[TBAA15]]58  // DEFAULT-NEXT:   [[TMP1:%.*]] = load ptr, ptr [[TMP0]], align 8, !tbaa [[TBAA18:![0-9]+]]59  // DEFAULT-NEXT:   [[TMP2:%.*]] = load ptr, ptr [[TMP1]], align 8, !tbaa [[TBAA20:![0-9]+]]60  // DEFAULT-NEXT:   store ptr null, ptr [[TMP2]], align 8, !tbaa [[TBAA22:![0-9]+]]61  // DISABLE-NEXT:   store ptr [[PTR]], ptr [[PTR_ADDR]], align 8, !tbaa [[TBAA6]]62  // DISABLE-NEXT:   [[TMP0:%.*]] = load ptr, ptr [[PTR_ADDR]], align 8, !tbaa [[TBAA6]]63  // DISABLE-NEXT:   [[TMP1:%.*]] = load ptr, ptr [[TMP0]], align 8, !tbaa [[TBAA6]]64  // DISABLE-NEXT:   [[TMP2:%.*]] = load ptr, ptr [[TMP1]], align 8, !tbaa [[TBAA6]]65  // DISABLE-NEXT:   store ptr null, ptr [[TMP2]], align 8, !tbaa [[TBAA6]]66  // COMMON-NEXT:    ret void67  //68  ***ptr = 0;69}70 71void p4char_const1(const char ****ptr) {72  // COMMON-LABEL: define void @p4char_const1(73  // COMMON-SAME:    ptr noundef [[PTR:%.+]])74  // COMMON:         [[PTR_ADDR:%.+]] = alloca ptr, align 875  // DEFAULT-NEXT:   store ptr [[PTR]], ptr [[PTR_ADDR]], align 8, !tbaa [[TBAA15]]76  // DEFAULT-NEXT:   [[TMP0:%.*]] = load ptr, ptr [[PTR_ADDR]], align 8, !tbaa [[TBAA15]]77  // DEFAULT-NEXT:   [[TMP1:%.*]] = load ptr, ptr [[TMP0]], align 8, !tbaa [[TBAA18]]78  // DEFAULT-NEXT:   [[TMP2:%.*]] = load ptr, ptr [[TMP1]], align 8, !tbaa [[TBAA20]]79  // DEFAULT-NEXT:   store ptr null, ptr [[TMP2]], align 8, !tbaa [[TBAA22]]80  // DISABLE-NEXT:   store ptr [[PTR]], ptr [[PTR_ADDR]], align 8, !tbaa [[TBAA6]]81  // DISABLE-NEXT:   [[TMP0:%.*]] = load ptr, ptr [[PTR_ADDR]], align 8, !tbaa [[TBAA6]]82  // DISABLE-NEXT:   [[TMP1:%.*]] = load ptr, ptr [[TMP0]], align 8, !tbaa [[TBAA6]]83  // DISABLE-NEXT:   [[TMP2:%.*]] = load ptr, ptr [[TMP1]], align 8, !tbaa [[TBAA6]]84  // DISABLE-NEXT:   store ptr null, ptr [[TMP2]], align 8, !tbaa [[TBAA6]]85  // COMMON-NEXT:   ret void86  //87  ***ptr = 0;88}89 90void p4char_const2(const char **const **ptr) {91  // COMMON-LABEL: define void @p4char_const2(92  // COMMON-SAME:    ptr noundef [[PTR:%.+]])93  // COMMON:         [[PTR_ADDR:%.+]] = alloca ptr, align 894  // DEFAULT-NEXT:   store ptr [[PTR]], ptr [[PTR_ADDR]], align 8, !tbaa [[TBAA15]]95  // DEFAULT-NEXT:   [[TMP0:%.*]] = load ptr, ptr [[PTR_ADDR]], align 8, !tbaa [[TBAA15]]96  // DEFAULT-NEXT:   [[TMP1:%.*]] = load ptr, ptr [[TMP0]], align 8, !tbaa [[TBAA18]]97  // DEFAULT-NEXT:   [[TMP2:%.*]] = load ptr, ptr [[TMP1]], align 8, !tbaa [[TBAA20]]98  // DEFAULT-NEXT:   store ptr null, ptr [[TMP2]], align 8, !tbaa [[TBAA22]]99  // DISABLE-NEXT:   store ptr [[PTR]], ptr [[PTR_ADDR]], align 8, !tbaa [[TBAA6]]100  // DISABLE-NEXT:   [[TMP0:%.*]] = load ptr, ptr [[PTR_ADDR]], align 8, !tbaa [[TBAA6]]101  // DISABLE-NEXT:   [[TMP1:%.*]] = load ptr, ptr [[TMP0]], align 8, !tbaa [[TBAA6]]102  // DISABLE-NEXT:   [[TMP2:%.*]] = load ptr, ptr [[TMP1]], align 8, !tbaa [[TBAA6]]103  // DISABLE-NEXT:   store ptr null, ptr [[TMP2]], align 8, !tbaa [[TBAA6]]104  // COMMON-NEXT:    ret void105  //106  ***ptr = 0;107}108 109struct S1 {110  int x;111  int y;112};113 114void p2struct(struct S1 **ptr) {115  // COMMON-LABEL: define void @p2struct(116  // COMMON-SAME:    ptr noundef [[PTR:%.+]])117  // COMMON:         [[PTR_ADDR:%.+]] = alloca ptr, align 8118  // DEFAULT-NEXT:    store ptr [[PTR]], ptr [[PTR_ADDR]], align 8, !tbaa [[TBAA24:![0-9]+]]119  // DISABLE-NEXT:    store ptr [[PTR]], ptr [[PTR_ADDR]], align 8, !tbaa [[TBAA6]]120  // DEFAULT-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[PTR_ADDR]], align 8, !tbaa [[TBAA24]]121  // DISABLE-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[PTR_ADDR]], align 8, !tbaa [[TBAA6]]122  // DEFAULT-NEXT:    store ptr null, ptr [[TMP0]], align 8, !tbaa [[TBAA26:![0-9]+]]123  // DISABLE-NEXT:    store ptr null, ptr [[TMP0]], align 8, !tbaa [[TBAA6]]124  // COMMON-NEXT:    ret void125  //126  *ptr = 0;127}128 129void p2struct_const(struct S1 const **ptr) {130  // COMMON-LABEL: define void @p2struct_const(131  // COMMON-SAME:    ptr noundef [[PTR:%.+]])132  // COMMON:         [[PTR_ADDR:%.+]] = alloca ptr, align 8133  // DEFAULT-NEXT:    store ptr [[PTR]], ptr [[PTR_ADDR]], align 8, !tbaa [[TBAA24]]134  // DEFAULT-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[PTR_ADDR]], align 8, !tbaa [[TBAA24]]135  // DEFAULT-NEXT:    store ptr null, ptr [[TMP0]], align 8, !tbaa [[TBAA26]]136  // DISABLE-NEXT:    store ptr [[PTR]], ptr [[PTR_ADDR]], align 8, !tbaa [[TBAA6]]137  // DISABLE-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[PTR_ADDR]], align 8, !tbaa [[TBAA6]]138  // DISABLE-NEXT:    store ptr null, ptr [[TMP0]], align 8, !tbaa [[TBAA6]]139  // COMMON-NEXT:    ret void140  //141  *ptr = 0;142}143 144struct S2 {145  struct S1 *s;146};147 148void p2struct2(struct S2 *ptr) {149  // COMMON-LABEL: define void @p2struct2(150  // COMMON-SAME:    ptr noundef [[PTR:%.+]])151  // COMMON:         [[PTR_ADDR:%.+]] = alloca ptr, align 8152  // DEFAULT-NEXT:   store ptr [[PTR]], ptr [[PTR_ADDR]], align 8, !tbaa [[TBAA28:![0-9]+]]153  // DEFAULT-NEXT:   [[TMP0:%.*]] = load ptr, ptr [[PTR_ADDR]], align 8, !tbaa [[TBAA28]]154  // DEFAULT-NEXT:   [[S:%.*]] = getelementptr inbounds nuw [[STRUCT_S2:%.*]], ptr [[TMP0]], i32 0, i32 0155  // DEFAULT-NEXT:   store ptr null, ptr [[S]], align 8, !tbaa [[TBAA30:![0-9]+]]156  // DISABLE-NEXT:   store ptr [[PTR]], ptr [[PTR_ADDR]], align 8, !tbaa [[TBAA6]]157  // DISABLE-NEXT:   [[TMP0:%.*]] = load ptr, ptr [[PTR_ADDR]], align 8, !tbaa [[TBAA6]]158  // DISABLE-NEXT:   [[S:%.*]] = getelementptr inbounds nuw [[STRUCT_S2:%.*]], ptr [[TMP0]], i32 0, i32 0159  // DISABLE-NEXT:   store ptr null, ptr [[S]], align 8, !tbaa [[TBAA8:![0-9]+]]160  // COMMON-NEXT:    ret void161    ptr->s = 0;162}163 164 165void vla1(int n, int ptr[][n], int idx) {166// COMMON-LABEL: define void @vla1(167// COMMON-SAME:    i32 noundef [[N:%.+]], ptr noundef [[PTR:%.+]], i32 noundef [[IDX:%.+]])168// COMMON:  	 [[N_ADDR:%.+]] = alloca i32, align 4169// COMMON-NEXT:  [[PTR_ADDR:%.+]] = alloca ptr, align 8170// COMMON-NEXT:  [[IDX_ADDR:%.+]] = alloca i32, align 4171// COMMON-NEXT: store i32 [[N]], ptr [[N_ADDR]], align 4, !tbaa [[TBAA2:![0-9]+]]172// DEFAULT-NEXT: store ptr [[PTR]], ptr [[PTR_ADDR]], align 8, !tbaa [[TBAA10]]173// DISABLE-NEXT: store ptr [[PTR]], ptr [[PTR_ADDR]], align 8, !tbaa [[TBAA6]]174// COMMON-NEXT: store i32 [[IDX]], ptr [[IDX_ADDR]], align 4, !tbaa [[TBAA2]]175// COMMON-NEXT: [[TMP0:%.*]] = load i32, ptr [[N_ADDR]], align 4, !tbaa [[TBAA2]]176// COMMON-NEXT: [[TMP1:%.*]] = zext i32 [[TMP0]] to i64177// DEFAULT-NEXT: [[TMP2:%.*]] = load ptr, ptr [[PTR_ADDR]], align 8, !tbaa [[TBAA10]]178// DISABLE-NEXT: [[TMP2:%.*]] = load ptr, ptr [[PTR_ADDR]], align 8, !tbaa [[TBAA6]]179// COMMON-NEXT: [[TMP3:%.*]] = load i32, ptr [[IDX_ADDR]], align 4, !tbaa [[TBAA2]]180// COMMON-NEXT: [[IDXPROM:%.*]] = sext i32 [[TMP3]] to i64181// COMMON-NEXT: [[TMP4:%.*]] = mul nsw i64 [[IDXPROM]], [[TMP1]]182// COMMON-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[TMP2]], i64 [[TMP4]]183// COMMON-NEXT: [[ARRAYIDX1:%.*]] = getelementptr inbounds i32, ptr [[ARRAYIDX]], i64 0184// COMMON-NEXT: store i32 0, ptr [[ARRAYIDX1]], align 4, !tbaa [[TBAA2]]185// COMMON-NEXT: ret void186 187    ptr[idx][0] = 0;188}189 190typedef struct {191  int i1;192} TypedefS;193 194void unamed_struct_typedef(TypedefS *ptr) {195// COMMON-LABEL: define void @unamed_struct_typedef(196// COMMON-SAME: ptr noundef [[PTRA:%.+]])197// COMMON:        [[PTR_ADDR:%.+]]  = alloca ptr, align 8198// DISABLE-NEXT:  store ptr [[PTR]], ptr [[PTR_ADDR]], align 8, !tbaa [[TBAA6]]199// DEFAULT-NEXT:  store ptr [[PTR]], ptr [[PTR_ADDR]], align 8, !tbaa [[TBAA32:![0-9]+]]200// DISABLE-NEXT:  [[TMP0:%.*]] = load ptr, ptr [[PTR_ADDR]], align 8, !tbaa [[TBAA6]]201// DEFAULT-NEXT:  [[TMP0:%.*]] = load ptr, ptr [[PTR_ADDR]], align 8, !tbaa [[TBAA32]]202// COMMON-NEXT:   [[I1:%.*]] = getelementptr inbounds nuw [[STRUCT_TYPEDEFS:%.*]], ptr [[TMP0]], i32 0, i32 0203// DISABLE-NEXT:  store i32 0, ptr [[I1]], align 4, !tbaa [[TBAA10:![0-9]+]]204// DEFAULT-NEXT:  store i32 0, ptr [[I1]], align 4, !tbaa [[TBAA33:![0-9]+]]205// COMMON-NEXT:   ret void206 207  ptr->i1 = 0;208}209 210int void_ptrs(void **ptr) {211// COMMON-LABEL: define i32 @void_ptrs(212// COMMON-SAME: ptr noundef [[PTRA:%.+]])213// COMMON:        [[PTR_ADDR:%.+]]  = alloca ptr, align 8214// DISABLE-NEXT:  store ptr [[PTR]], ptr [[PTR_ADDR]], align 8, !tbaa [[TBAA6]]215// DEFAULT-NEXT:  store ptr [[PTR]], ptr [[PTR_ADDR]], align 8, !tbaa [[TBAA35:![0-9]+]]216// DISABLE-NEXT:  [[TMP0:%.*]] = load ptr, ptr [[PTR_ADDR]], align 8, !tbaa [[TBAA6]]217// DEFAULT-NEXT:  [[TMP0:%.*]] = load ptr, ptr [[PTR_ADDR]], align 8, !tbaa [[TBAA35]]218// DISABLE-NEXT:  [[TMP1:%.*]] = load ptr, ptr [[TMP0]], align 8, !tbaa [[TBAA6]]219// DEFAULT-NEXT:  [[TMP1:%.*]] = load ptr, ptr [[TMP0]], align 8, !tbaa [[TBAA32]]220// COMMON-NEXT:   [[TOBOOL:%.*]] = icmp ne ptr [[TMP1]], null221// COMMON-NEXT:   [[TMP2:%.*]] = zext i1 [[TOBOOL]] to i64222// COMMON-NEXT:   [[COND:%.*]] = select i1 [[TOBOOL]], i32 0, i32 1223// COMMON-NEXT:   ret i32 [[COND]]224 225  return *ptr ? 0 : 1;226}227 228// DISABLE: [[TBAA2]] = !{[[META3:![0-9]+]], [[META3]], i64 0}229// DISABLE: [[META3]] = !{!"int", [[META4:![0-9]+]], i64 0}230// DISABLE: [[META4]] = !{!"omnipotent char", [[META5:![0-9]+]], i64 0}231// DISABLE: [[META5]] = !{!"Simple C/C++ TBAA"}232// DISABLE: [[TBAA6]] = !{[[META7:![0-9]+]], [[META7]], i64 0}233// DISABLE: [[META7]] = !{!"any pointer", [[META4]], i64 0}234// DISABLE: [[TBAA8]] = !{[[META9:![0-9]+]], [[META7]], i64 0}235// DISABLE: [[META9]] = !{!"S2", [[META7]], i64 0}236// DISABLE: [[TBAA10]] = !{[[META11:![0-9]+]], [[META3]], i64 0}237// DISABLE: [[META11]] = !{!"", [[META3]], i64 0}238// DEFAULT: [[TBAA2]] = !{[[META3:![0-9]+]], [[META3]], i64 0}239// DEFAULT: [[META3]] = !{!"int", [[META4:![0-9]+]], i64 0}240// DEFAULT: [[META4]] = !{!"omnipotent char", [[META5:![0-9]+]], i64 0}241// DEFAULT: [[META5]] = !{!"Simple C/C++ TBAA"}242// DEFAULT: [[TBAA6]] = !{[[META7:![0-9]+]], [[META7]], i64 0}243// DEFAULT: [[META7]] = !{!"p2 int", [[META8:![0-9]+]], i64 0}244// DEFAULT: [[META8]] = !{!"any p2 pointer", [[META9:![0-9]+]], i64 0}245// DEFAULT: [[META9]] = !{!"any pointer", [[META4]], i64 0}246// DEFAULT: [[TBAA10]] = !{[[META11:![0-9]+]], [[META11]], i64 0}247// DEFAULT: [[META11]] = !{!"p1 int", [[META9]], i64 0}248// DEFAULT: [[TBAA12]] = !{[[META13:![0-9]+]], [[META13]], i64 0}249// DEFAULT: [[META13]] = !{!"p3 int", [[META14:![0-9]+]], i64 0}250// DEFAULT: [[META14]] = !{!"any p3 pointer", [[META8]], i64 0}251// DEFAULT: [[TBAA15]] = !{[[META16:![0-9]+]], [[META16]], i64 0}252// DEFAULT: [[META16]] = !{!"p4 omnipotent char", [[META17:![0-9]+]], i64 0}253// DEFAULT: [[META17]] = !{!"any p4 pointer", [[META14]], i64 0}254// DEFAULT: [[TBAA18]] = !{[[META19:![0-9]+]], [[META19]], i64 0}255// DEFAULT: [[META19]] = !{!"p3 omnipotent char", [[META14]], i64 0}256// DEFAULT: [[TBAA20]] = !{[[META21:![0-9]+]], [[META21]], i64 0}257// DEFAULT: [[META21]] = !{!"p2 omnipotent char", [[META8]], i64 0}258// DEFAULT: [[TBAA22]] = !{[[META23:![0-9]+]], [[META23]], i64 0}259// DEFAULT: [[META23]] = !{!"p1 omnipotent char", [[META9]], i64 0}260// DEFAULT: [[TBAA24]] = !{[[META25:![0-9]+]], [[META25]], i64 0}261// DEFAULT: [[META25]] = !{!"p2 _ZTS2S1", [[META8]], i64 0}262// DEFAULT: [[TBAA26]] = !{[[META27:![0-9]+]], [[META27]], i64 0}263// DEFAULT: [[META27]] = !{!"p1 _ZTS2S1", [[META9]], i64 0}264// DEFAULT: [[TBAA28]] = !{[[META29:![0-9]+]], [[META29]], i64 0}265// DEFAULT: [[META29]] = !{!"p1 _ZTS2S2", [[META9]], i64 0}266// DEFAULT: [[TBAA30]] = !{[[META31:![0-9]+]], [[META27]], i64 0}267// DEFAULT: [[META31]] = !{!"S2", [[META27]], i64 0}268// DEFAULT: [[TBAA32]] = !{[[META9]], [[META9]], i64 0}269// DEFAULT: [[TBAA33]] = !{[[META34:![0-9]+]], [[META3]], i64 0}270// DEFAULT: [[META34]] = !{!"", [[META3]], i64 0}271// DEFAULT: [[TBAA35]] = !{[[META8]], [[META8]], i64 0}272//.273