@@ -186,6 +186,28 @@ void vla1(int n, int ptr[][n], int idx) {
186
186
ptr [idx ][0 ] = 0 ;
187
187
}
188
188
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
+
189
211
// ENABLED: [[P2INT_0]] = !{[[P2INT:!.+]], [[P2INT]], i64 0}
190
212
// ENABLED: [[P2INT]] = !{!"p2 int", [[ANY_POINTER:!.+]], i64 0}
191
213
// DEFAULT: [[ANYPTR]] = !{[[ANY_POINTER:!.+]], [[ANY_POINTER]], i64 0}
@@ -217,3 +239,5 @@ void vla1(int n, int ptr[][n], int idx) {
217
239
// DEFAULT: [[S2_TY]] = !{!"S2", [[ANY_POINTER]], i64 0}
218
240
// COMMON: [[INT_TAG]] = !{[[INT_TY:!.+]], [[INT_TY]], i64 0}
219
241
// 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