// Add the field.
Elements.push_back(C);
NextFieldOffsetInBytes = AlignedNextFieldOffsetInBytes + getSizeInBytes(C);
- LLVMStructAlignment = std::max(LLVMStructAlignment, FieldAlignment);
+
+ if (Packed)
+ assert(LLVMStructAlignment == 1 && "Packed struct not byte-aligned!");
+ else
+ LLVMStructAlignment = std::max(LLVMStructAlignment, FieldAlignment);
+
return true;
}
int g10 = (2.0 + 3.0i) * (5.0 + 7.0i) != (-11.0 + 29.0i);
// PR5108
-// CHECK: @ss = global %4 <{ i32 0, i8 7 }>, align 1
-struct s {
+// CHECK: @gv1 = global %4 <{ i32 0, i8 7 }>, align 1
+struct {
unsigned long a;
unsigned long b:3;
-} __attribute__((__packed__)) ss = { .a = 0x0, .b = 7, };
+} __attribute__((__packed__)) gv1 = { .a = 0x0, .b = 7, };
+
+// PR5118
+// CHECK: @gv2 = global %5 <{ i8 1, i8* null }>, align 1
+struct {
+ unsigned char a;
+ char *b;
+} __attribute__((__packed__)) gv2 = { 1, (void*)0 };
// Global references
// RUN: grep '@g11.l0 = internal global i32 ptrtoint (i32 ()\* @g11 to i32)' %t &&