Files
c3c/test/test_suite/bitstruct/embedded_bitstruct.c3t

71 lines
1.5 KiB
C

// #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
}