Files
c3c/test/test_suite/enumerations/enum_associated_value.c3t

52 lines
1.8 KiB
C

// #target: macos-x64
module test;
import libc;
enum Foo : uint (int val, char* testme)
{
A(123, "Number A"),
B(333, "Number B"),
}
fn void main()
{
int x = Foo.A.val;
Foo f = Foo.B;
Foo g = Foo.A;
libc::printf("%d (%s) %d (%s)\n", f.val, f.testme, g.val, g.testme);
}
/* #expect: test.ll
@.typeid.test.Foo = linkonce constant { i8, i64, i64 } { i8 8, i64 2, i64 2 }, align 8
@test.Foo.val = linkonce constant [2 x i32] [i32 123, i32 333], align 4
@.str = private unnamed_addr constant [9 x i8] c"Number A\00", align 1
@.str.1 = private unnamed_addr constant [9 x i8] c"Number B\00", align 1
@test.Foo.testme = linkonce constant [2 x i8*] [i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str, i32 0, i32 0), i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.1, i32 0, i32 0)], align 8
@.str.2 = private unnamed_addr constant [17 x i8] c"%d (%s) %d (%s)\0A\00", align 1
; Function Attrs: nounwind
define void @test.main() #0 {
entry:
%x = alloca i32, align 4
%f = alloca i32, align 4
%g = alloca i32, align 4
store i32 123, i32* %x, align 4
store i32 1, i32* %f, align 4
store i32 0, i32* %g, align 4
%0 = load i32, i32* %f, align 4
%1 = getelementptr inbounds [2 x i32], [2 x i32]* @test.Foo.val, i32 0, i32 %0
%2 = load i32, i32* %1, align 4
%3 = load i32, i32* %f, align 4
%4 = getelementptr inbounds [2 x i8*], [2 x i8*]* @test.Foo.testme, i32 0, i32 %3
%5 = load i8*, i8** %4, align 8
%6 = load i32, i32* %g, align 4
%7 = getelementptr inbounds [2 x i32], [2 x i32]* @test.Foo.val, i32 0, i32 %6
%8 = load i32, i32* %7, align 4
%9 = load i32, i32* %g, align 4
%10 = getelementptr inbounds [2 x i8*], [2 x i8*]* @test.Foo.testme, i32 0, i32 %9
%11 = load i8*, i8** %10, align 8
%12 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.2, i32 0, i32 0), i32 %2, i8* %5, i32 %8, i8* %11)
ret void
}