Skip to content

Commit c4eeef3

Browse files
committed
[TBAA] Add test for generating pointer-tbaa for unnamed structs.
Currently we generate incorrect metadata not considering compatible types in C.
1 parent eed9af9 commit c4eeef3

File tree

1 file changed

+24
-0
lines changed

1 file changed

+24
-0
lines changed

clang/test/CodeGen/tbaa-pointers.c

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,28 @@ void vla1(int n, int ptr[][n], int idx) {
186186
ptr[idx][0] = 0;
187187
}
188188

189+
typedef struct {
190+
int i1;
191+
} TypedefS;
192+
193+
// FIXME: The !tbaa tag for unnamed structs doesn't account for compatible
194+
// types in C.
195+
void unamed_struct_typedef(TypedefS *ptr) {
196+
// COMMON-LABEL: define void @unamed_struct_typedef(
197+
// COMMON-SAME: ptr noundef %ptr)
198+
// COMMON-NEXT: entry:
199+
// COMMON-NEXT: [[PTR_ADDR:%.+]] = alloca ptr, align 8
200+
// DEFAULT-NEXT: store ptr %ptr, ptr [[PTR_ADDR]], align 8, !tbaa [[ANYPTR]]
201+
// DEFAULT-NEXT: [[L0:%.+]] = load ptr, ptr [[PTR_ADDR]], align 8, !tbaa [[ANYPTR]]
202+
// ENABLED-NEXT: store ptr %ptr, ptr [[PTR_ADDR]], align 8, !tbaa [[P1TYPEDEF:!.+]]
203+
// ENABLED-NEXT: [[L0:%.+]] = load ptr, ptr [[PTR_ADDR]], align 8, !tbaa [[P1TYPEDEF]]
204+
// COMMON-NEXT: [[GEP:%.+]] = getelementptr inbounds nuw %struct.TypedefS, ptr [[L0]], i32 0, i32 0
205+
// COMMON-NEXT: store i32 0, ptr [[GEP]], align 4
206+
// COMMON-NEXT: ret void
207+
208+
ptr->i1 = 0;
209+
}
210+
189211
// ENABLED: [[P2INT_0]] = !{[[P2INT:!.+]], [[P2INT]], i64 0}
190212
// ENABLED: [[P2INT]] = !{!"p2 int", [[ANY_POINTER:!.+]], i64 0}
191213
// DEFAULT: [[ANYPTR]] = !{[[ANY_POINTER:!.+]], [[ANY_POINTER]], i64 0}
@@ -217,3 +239,5 @@ void vla1(int n, int ptr[][n], int idx) {
217239
// DEFAULT: [[S2_TY]] = !{!"S2", [[ANY_POINTER]], i64 0}
218240
// COMMON: [[INT_TAG]] = !{[[INT_TY:!.+]], [[INT_TY]], i64 0}
219241
// COMMON: [[INT_TY]] = !{!"int", [[CHAR]], i64 0}
242+
// ENABLED: [[P1TYPEDEF]] = !{[[P1TYPEDEF_TY:!.+]], [[P1TYPEDEF_TY]], i64 0}
243+
// ENABLED: [[P1TYPEDEF_TY]] = !{!"p1 _ZTS8TypedefS", [[ANY_POINTER]], i64 0}

0 commit comments

Comments
 (0)