mirror of
https://github.com/c3lang/c3c.git
synced 2026-02-27 12:01:16 +00:00
122 lines
3.3 KiB
Plaintext
122 lines
3.3 KiB
Plaintext
// #target: macos-x64
|
|
module testing;
|
|
import std::io;
|
|
struct Foo
|
|
{
|
|
bitstruct : ushort {
|
|
short expand : 0..7;
|
|
}
|
|
void* widget;
|
|
}
|
|
|
|
struct Foo2
|
|
{
|
|
bitstruct : char[2] {
|
|
short expand : 0..7;
|
|
}
|
|
void* widget;
|
|
}
|
|
|
|
struct Foo3
|
|
{
|
|
bitstruct : char[2] {
|
|
bool a : 0;
|
|
short expand : 1..7;
|
|
bool b : 8;
|
|
}
|
|
void* widget;
|
|
}
|
|
struct Foo4
|
|
{
|
|
bitstruct : short {
|
|
bool a : 0;
|
|
short expand : 1..7;
|
|
bool b : 8;
|
|
}
|
|
void* widget;
|
|
}
|
|
|
|
fn void main()
|
|
{
|
|
void* foo;
|
|
Foo *f = &&Foo { .expand = 2, .widget = &f };
|
|
Foo2 *f2 = &&Foo2 { .expand = 2, .widget = &f };
|
|
Foo3 *f3 = &&Foo3 { .expand = 2, .a = true, .b = true, .widget = &f };
|
|
Foo4 *f4 = &&Foo4 { .expand = 2, .a = true, .b = true, .widget = &f };
|
|
}
|
|
|
|
/* #expect: testing.ll
|
|
|
|
define void @testing.main() #0 {
|
|
entry:
|
|
%foo = alloca ptr, align 8
|
|
%f = alloca ptr, align 8
|
|
%literal = alloca %Foo, align 8
|
|
%f2 = alloca ptr, align 8
|
|
%literal2 = alloca %Foo2, align 8
|
|
%f3 = alloca ptr, align 8
|
|
%literal6 = alloca %Foo3, align 8
|
|
%f4 = alloca ptr, align 8
|
|
%literal11 = alloca %Foo4, align 8
|
|
store ptr null, ptr %foo, align 8
|
|
store i16 0, ptr %literal, align 8
|
|
%ptradd = getelementptr inbounds i8, ptr %literal, i64 8
|
|
store ptr null, ptr %ptradd, align 8
|
|
%0 = load i16, ptr %literal, align 8
|
|
%1 = and i16 %0, -256
|
|
%2 = or i16 %1, 2
|
|
store i16 %2, ptr %literal, align 8
|
|
%ptradd1 = getelementptr inbounds i8, ptr %literal, i64 8
|
|
store ptr %f, ptr %ptradd1, align 8
|
|
store ptr %literal, ptr %f, align 8
|
|
store i8 0, ptr %literal2, align 1
|
|
%ptradd3 = getelementptr inbounds i8, ptr %literal2, i64 1
|
|
store i8 0, ptr %ptradd3, align 1
|
|
%ptradd4 = getelementptr inbounds i8, ptr %literal2, i64 8
|
|
store ptr null, ptr %ptradd4, align 8
|
|
store i8 2, ptr %literal2, align 1
|
|
%ptradd5 = getelementptr inbounds i8, ptr %literal2, i64 8
|
|
store ptr %f, ptr %ptradd5, align 8
|
|
store ptr %literal2, ptr %f2, align 8
|
|
store i8 0, ptr %literal6, align 1
|
|
%ptradd7 = getelementptr inbounds i8, ptr %literal6, i64 1
|
|
store i8 0, ptr %ptradd7, align 1
|
|
%ptradd8 = getelementptr inbounds i8, ptr %literal6, i64 8
|
|
store ptr null, ptr %ptradd8, align 8
|
|
%3 = load i8, ptr %literal6, align 1
|
|
%4 = and i8 %3, 1
|
|
%5 = or i8 %4, 4
|
|
store i8 %5, ptr %literal6, align 1
|
|
%6 = load i8, ptr %literal6, align 1
|
|
%7 = and i8 %6, -2
|
|
%8 = or i8 %7, 1
|
|
store i8 %8, ptr %literal6, align 1
|
|
%ptradd9 = getelementptr inbounds i8, ptr %literal6, i64 1
|
|
%9 = load i8, ptr %ptradd9, align 1
|
|
%10 = and i8 %9, -2
|
|
%11 = or i8 %10, 1
|
|
store i8 %11, ptr %ptradd9, align 1
|
|
%ptradd10 = getelementptr inbounds i8, ptr %literal6, i64 8
|
|
store ptr %f, ptr %ptradd10, align 8
|
|
store ptr %literal6, ptr %f3, align 8
|
|
store i16 0, ptr %literal11, align 8
|
|
%ptradd12 = getelementptr inbounds i8, ptr %literal11, i64 8
|
|
store ptr null, ptr %ptradd12, align 8
|
|
%12 = load i16, ptr %literal11, align 8
|
|
%13 = and i16 %12, -255
|
|
%14 = or i16 %13, 4
|
|
store i16 %14, ptr %literal11, align 8
|
|
%15 = load i16, ptr %literal11, align 8
|
|
%16 = and i16 %15, -2
|
|
%17 = or i16 %16, 1
|
|
store i16 %17, ptr %literal11, align 8
|
|
%18 = load i16, ptr %literal11, align 8
|
|
%19 = and i16 %18, -257
|
|
%20 = or i16 %19, 256
|
|
store i16 %20, ptr %literal11, align 8
|
|
%ptradd13 = getelementptr inbounds i8, ptr %literal11, i64 8
|
|
store ptr %f, ptr %ptradd13, align 8
|
|
store ptr %literal11, ptr %f4, align 8
|
|
ret void
|
|
}
|