// #target: macos-x64 module foo; struct Bar { int x; struct { struct { int y; } } bitstruct : uint { int ww : 2..10; } } struct Foo { struct { struct { int x; } struct { int y; } int z; } int w; } extern fn void printf(char*, ...); fn void main() { Bar b = { 1, 2, -5 }; printf("%d %d\n", b.y, b.ww); Foo f = { 5, 6, 7, 8 }; printf("%d %d %d %d\n", f.x, f.y, f.z, f.w); } /* #expect: foo.ll define void @foo.main() #0 { entry: %b = alloca %Bar, align 4 %f = alloca %Foo, align 4 call void @llvm.memcpy.p0.p0.i32(ptr align 4 %b, ptr align 4 @.__const, i32 12, i1 false) %ptradd = getelementptr inbounds i8, ptr %b, i64 4 %ptradd1 = getelementptr inbounds i8, ptr %b, i64 8 %0 = load i32, ptr %ptradd1, align 4 %shl = shl i32 %0, 21 %ashr = ashr i32 %shl, 23 %1 = load i32, ptr %ptradd, align 4 call void (ptr, ...) @printf(ptr @.str, i32 %1, i32 %ashr) call void @llvm.memcpy.p0.p0.i32(ptr align 4 %f, ptr align 4 @.__const.10, i32 16, i1 false) %ptradd2 = getelementptr inbounds i8, ptr %f, i64 4 %ptradd3 = getelementptr inbounds i8, ptr %f, i64 8 %ptradd4 = getelementptr inbounds i8, ptr %f, i64 12 %2 = load i32, ptr %f, align 4 %3 = load i32, ptr %ptradd2, align 4 %4 = load i32, ptr %ptradd3, align 4 %5 = load i32, ptr %ptradd4, align 4 call void (ptr, ...) @printf(ptr @.str.11, i32 %2, i32 %3, i32 %4, i32 %5) ret void }