@@ -571,3 +571,50 @@ struct SSpp_align16 {
571
571
//
572
572
void TSpp_align16 (SSpp_align16 s) { *s.a .x = 1 ; }
573
573
574
+
575
+ struct Sempty {
576
+ };
577
+ // CHECK-A64-LABEL: define dso_local void @_Z6Tempty6Sempty(
578
+ // CHECK-A64-SAME: i8 [[S_COERCE:%.*]]) #[[ATTR0]] {
579
+ // CHECK-A64-NEXT: [[ENTRY:.*:]]
580
+ // CHECK-A64-NEXT: [[S:%.*]] = alloca [[STRUCT_SEMPTY:%.*]], align 1
581
+ // CHECK-A64-NEXT: [[COERCE_DIVE:%.*]] = getelementptr inbounds nuw [[STRUCT_SEMPTY]], ptr [[S]], i32 0, i32 0
582
+ // CHECK-A64-NEXT: store i8 [[S_COERCE]], ptr [[COERCE_DIVE]], align 1
583
+ // CHECK-A64-NEXT: ret void
584
+ //
585
+ // CHECK-A64_32-LABEL: define void @_Z6Tempty6Sempty(
586
+ // CHECK-A64_32-SAME: i8 [[S_COERCE:%.*]]) #[[ATTR0]] {
587
+ // CHECK-A64_32-NEXT: [[ENTRY:.*:]]
588
+ // CHECK-A64_32-NEXT: [[S:%.*]] = alloca [[STRUCT_SEMPTY:%.*]], align 1
589
+ // CHECK-A64_32-NEXT: [[COERCE_DIVE:%.*]] = getelementptr inbounds nuw [[STRUCT_SEMPTY]], ptr [[S]], i32 0, i32 0
590
+ // CHECK-A64_32-NEXT: store i8 [[S_COERCE]], ptr [[COERCE_DIVE]], align 1
591
+ // CHECK-A64_32-NEXT: ret void
592
+ //
593
+ void Tempty (Sempty s) { }
594
+
595
+
596
+ struct SpSempty {
597
+ Sempty y;
598
+ int *x;
599
+ };
600
+ // CHECK-A64-LABEL: define dso_local void @_Z8TpSempty8SpSempty(
601
+ // CHECK-A64-SAME: [2 x i64] [[S_COERCE:%.*]]) #[[ATTR0]] {
602
+ // CHECK-A64-NEXT: [[ENTRY:.*:]]
603
+ // CHECK-A64-NEXT: [[S:%.*]] = alloca [[STRUCT_SPSEMPTY:%.*]], align 8
604
+ // CHECK-A64-NEXT: store [2 x i64] [[S_COERCE]], ptr [[S]], align 8
605
+ // CHECK-A64-NEXT: [[X:%.*]] = getelementptr inbounds nuw [[STRUCT_SPSEMPTY]], ptr [[S]], i32 0, i32 1
606
+ // CHECK-A64-NEXT: [[TMP0:%.*]] = load ptr, ptr [[X]], align 8
607
+ // CHECK-A64-NEXT: store i32 1, ptr [[TMP0]], align 4
608
+ // CHECK-A64-NEXT: ret void
609
+ //
610
+ // CHECK-A64_32-LABEL: define void @_Z8TpSempty8SpSempty(
611
+ // CHECK-A64_32-SAME: i64 [[S_COERCE:%.*]]) #[[ATTR0]] {
612
+ // CHECK-A64_32-NEXT: [[ENTRY:.*:]]
613
+ // CHECK-A64_32-NEXT: [[S:%.*]] = alloca [[STRUCT_SPSEMPTY:%.*]], align 4
614
+ // CHECK-A64_32-NEXT: store i64 [[S_COERCE]], ptr [[S]], align 4
615
+ // CHECK-A64_32-NEXT: [[X:%.*]] = getelementptr inbounds nuw [[STRUCT_SPSEMPTY]], ptr [[S]], i32 0, i32 1
616
+ // CHECK-A64_32-NEXT: [[TMP0:%.*]] = load ptr, ptr [[X]], align 4
617
+ // CHECK-A64_32-NEXT: store i32 1, ptr [[TMP0]], align 4
618
+ // CHECK-A64_32-NEXT: ret void
619
+ //
620
+ void TpSempty (SpSempty s) { *s.x = 1 ; }
0 commit comments