mirror of
https://github.com/c3lang/c3c.git
synced 2026-02-27 12:01:16 +00:00
Const Enums From / to ordinal using casts is back. Add "--use-old-enums", deprecating lookup.
This commit is contained in:
committed by
Christoffer Lerno
parent
4a803ed0cf
commit
13bb2b6690
@@ -23,7 +23,7 @@ fn Foo getFoo(Foo f)
|
||||
%.introspect = type { i8, i64, ptr, i64, i64, i64, [0 x i64] }
|
||||
%Foo = type { i8, i8, i8 }
|
||||
|
||||
@"$ct.test.Foo" = linkonce global %.introspect { i8 9, i64 0, ptr null, i64 3, i64 0, i64 3, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.test.Foo" = linkonce global %.introspect { i8 10, i64 0, ptr null, i64 3, i64 0, i64 3, [0 x i64] zeroinitializer }, align 8
|
||||
|
||||
define i32 @test.testing() #0 {
|
||||
entry:
|
||||
|
||||
@@ -11,8 +11,8 @@ fn void main()
|
||||
|
||||
%any = type { ptr, i64 }
|
||||
@"$ct.any$" = linkonce global %.introspect { i8 7, i64 0, ptr null, i64 16, i64 0, i64 0, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.p$any$" = linkonce global %.introspect { i8 18, i64 0, ptr null, i64 8, i64 ptrtoint (ptr @"$ct.any$" to i64), i64 0, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.p$p$any$" = linkonce global %.introspect { i8 18, i64 0, ptr null, i64 8, i64 ptrtoint (ptr @"$ct.p$any$" to i64), i64 0, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.p$any$" = linkonce global %.introspect { i8 19, i64 0, ptr null, i64 8, i64 ptrtoint (ptr @"$ct.any$" to i64), i64 0, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.p$p$any$" = linkonce global %.introspect { i8 19, i64 0, ptr null, i64 8, i64 ptrtoint (ptr @"$ct.p$any$" to i64), i64 0, [0 x i64] zeroinitializer }, align 8
|
||||
|
||||
define void @foo.main() #0 {
|
||||
entry:
|
||||
|
||||
@@ -68,7 +68,7 @@ fn void main()
|
||||
@"$ct.int" = linkonce global %.introspect { i8 2, i64 0, ptr null, i64 4, i64 0, i64 0, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.double" = linkonce global %.introspect { i8 4, i64 0, ptr null, i64 8, i64 0, i64 0, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.any$" = linkonce global %.introspect { i8 7, i64 0, ptr null, i64 16, i64 0, i64 0, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.p$int" = linkonce global %.introspect { i8 18, i64 0, ptr null, i64 8, i64 ptrtoint (ptr @"$ct.int" to i64), i64 0, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.p$int" = linkonce global %.introspect { i8 19, i64 0, ptr null, i64 8, i64 ptrtoint (ptr @"$ct.int" to i64), i64 0, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.bool" = linkonce global %.introspect { i8 1, i64 0, ptr null, i64 1, i64 0, i64 0, [0 x i64] zeroinitializer }, align 8
|
||||
|
||||
define void @foo.test(i64 %0, ptr %1) #0 {
|
||||
|
||||
@@ -15,7 +15,7 @@ Connection[3] link @private
|
||||
|
||||
/* #expect: test.ll
|
||||
|
||||
@"$ct.test.Connection" = linkonce global %.introspect { i8 9, i64 0, ptr null, i64 24, i64 0, i64 3, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.test.Connection" = linkonce global %.introspect { i8 10, i64 0, ptr null, i64 24, i64 0, i64 3, [0 x i64] zeroinitializer }, align 8
|
||||
@.str = private unnamed_addr constant [6 x i8] c"link1\00", align 1
|
||||
@.str.1 = private unnamed_addr constant [6 x i8] c"link2\00", align 1
|
||||
@.str.2 = private unnamed_addr constant [6 x i8] c"link3\00", align 1
|
||||
|
||||
@@ -14,7 +14,7 @@ attrdef @Attr(MyInt x);
|
||||
|
||||
/* #expect: test.ll
|
||||
|
||||
@"$ct.test.Foo" = linkonce global %.introspect { i8 9, i64 0, ptr null, i64 4, i64 0, i64 1, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.test.Foo" = linkonce global %.introspect { i8 10, i64 0, ptr null, i64 4, i64 0, i64 1, [0 x i64] zeroinitializer }, align 8
|
||||
|
||||
define void @test.main() #0 {
|
||||
entry:
|
||||
|
||||
@@ -33,7 +33,7 @@ fn void main() @TestZero
|
||||
|
||||
%Foo = type { i32, [1020 x i8], i32, [1020 x i8] }
|
||||
|
||||
@"$ct.test.Foo" = linkonce global %.introspect { i8 9, i64 0, ptr null, i64 2048, i64 0, i64 2, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.test.Foo" = linkonce global %.introspect { i8 10, i64 0, ptr null, i64 2048, i64 0, i64 2, [0 x i64] zeroinitializer }, align 8
|
||||
@test.f = local_unnamed_addr global %Foo zeroinitializer, align 1024
|
||||
|
||||
define weak void @test.testme2() #0 {
|
||||
|
||||
@@ -6,11 +6,11 @@ enum MyEnum : int
|
||||
|
||||
fn int toInt(MyEnum value)
|
||||
{
|
||||
return (int)value; // #error: but you can use .ordinal
|
||||
return (int)value;
|
||||
}
|
||||
|
||||
fn MyEnum toEnum(int value)
|
||||
{
|
||||
return (MyEnum)value; // #error: but you can use .from_ordinal()
|
||||
return (MyEnum)value;
|
||||
}
|
||||
|
||||
|
||||
@@ -300,11 +300,11 @@ fn int strcmp(char *s1, char *s2) {
|
||||
%SubStruct = type { i16, i16 }
|
||||
%PBVTest = type { double, double, i32 }
|
||||
|
||||
@"$ct.foo.List" = linkonce global %.introspect { i8 9, i64 0, ptr null, i64 16, i64 0, i64 2, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.foo.PBVTest" = linkonce global %.introspect { i8 9, i64 0, ptr null, i64 24, i64 0, i64 3, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.foo.FunStructTest" = linkonce global %.introspect { i8 9, i64 0, ptr null, i64 64, i64 0, i64 3, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.foo.SubStruct" = linkonce global %.introspect { i8 9, i64 0, ptr null, i64 4, i64 0, i64 2, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.foo.Quad" = linkonce global %.introspect { i8 9, i64 0, ptr null, i64 24, i64 0, i64 5, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.foo.List" = linkonce global %.introspect { i8 10, i64 0, ptr null, i64 16, i64 0, i64 2, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.foo.PBVTest" = linkonce global %.introspect { i8 10, i64 0, ptr null, i64 24, i64 0, i64 3, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.foo.FunStructTest" = linkonce global %.introspect { i8 10, i64 0, ptr null, i64 64, i64 0, i64 3, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.foo.SubStruct" = linkonce global %.introspect { i8 10, i64 0, ptr null, i64 4, i64 0, i64 2, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.foo.Quad" = linkonce global %.introspect { i8 10, i64 0, ptr null, i64 24, i64 0, i64 5, [0 x i64] zeroinitializer }, align 8
|
||||
@foo.data = local_unnamed_addr global ptr null, align 8
|
||||
@foo.listNode3 = global %List { i32 4, ptr null }, align 8
|
||||
@foo.listNode2 = global %List { i32 3, ptr @foo.listNode3 }, align 8
|
||||
|
||||
@@ -51,9 +51,9 @@ fn void main()
|
||||
@.str.8 = private unnamed_addr constant [3 x i8] c"%c\00", align 1
|
||||
@.str.9 = private unnamed_addr constant [5 x i8] c"Acdc\00", align 1
|
||||
@.__const = private unnamed_addr constant [3 x i32] [i32 1, i32 2, i32 3], align 4
|
||||
@"$ct.std.io.File" = linkonce global %.introspect { i8 9, i64 0, ptr null, i64 8, i64 0, i64 1, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.std.io.File" = linkonce global %.introspect { i8 10, i64 0, ptr null, i64 8, i64 0, i64 1, [0 x i64] zeroinitializer }, align 8
|
||||
@.str.10 = private unnamed_addr constant [3 x i8] c"%s\00", align 1
|
||||
@"$ct.a3$int" = linkonce global %.introspect { i8 14, i64 0, ptr null, i64 12, i64 ptrtoint (ptr @"$ct.int" to i64), i64 3, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.a3$int" = linkonce global %.introspect { i8 15, i64 0, ptr null, i64 12, i64 ptrtoint (ptr @"$ct.int" to i64), i64 3, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.int" = linkonce global %.introspect { i8 2, i64 0, ptr null, i64 4, i64 0, i64 0, [0 x i64] zeroinitializer }, align 8
|
||||
@.str.11 = private unnamed_addr constant [3 x i8] c"%s\00", align 1
|
||||
@.__const.12 = private unnamed_addr constant [3 x i32] [i32 1, i32 3, i32 3], align 4
|
||||
|
||||
@@ -29,20 +29,20 @@ fn void main()
|
||||
%"int[]" = type { ptr, i64 }
|
||||
%any = type { ptr, i64 }
|
||||
|
||||
@"$ct.test.Foo" = linkonce global %.introspect { i8 9, i64 0, ptr null, i64 8, i64 0, i64 2, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.test.Foo" = linkonce global %.introspect { i8 10, i64 0, ptr null, i64 8, i64 0, i64 2, [0 x i64] zeroinitializer }, align 8
|
||||
@.str = private unnamed_addr constant [9 x i8] c"%s %s %s\00", align 1
|
||||
@"$ct.a2$int" = linkonce global %.introspect { i8 14, i64 0, ptr null, i64 8, i64 ptrtoint (ptr @"$ct.int" to i64), i64 2, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.a2$int" = linkonce global %.introspect { i8 15, i64 0, ptr null, i64 8, i64 ptrtoint (ptr @"$ct.int" to i64), i64 2, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.int" = linkonce global %.introspect { i8 2, i64 0, ptr null, i64 4, i64 0, i64 0, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.sa$int" = linkonce global %.introspect { i8 15, i64 0, ptr null, i64 16, i64 ptrtoint (ptr @"$ct.int" to i64), i64 0, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.v2$int" = linkonce global %.introspect { i8 16, i64 0, ptr null, i64 8, i64 ptrtoint (ptr @"$ct.int" to i64), i64 2, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.sa$int" = linkonce global %.introspect { i8 16, i64 0, ptr null, i64 16, i64 ptrtoint (ptr @"$ct.int" to i64), i64 0, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.v2$int" = linkonce global %.introspect { i8 17, i64 0, ptr null, i64 8, i64 ptrtoint (ptr @"$ct.int" to i64), i64 2, [0 x i64] zeroinitializer }, align 8
|
||||
@.__const = private unnamed_addr constant [1 x %Foo] [%Foo { i32 1, i32 2 }], align 4
|
||||
@.__const.1 = private unnamed_addr constant %Foo { i32 1, i32 2 }, align 4
|
||||
@.__const.2 = private unnamed_addr constant [1 x [2 x i32]] [[2 x i32] [i32 1, i32 2]], align 4
|
||||
@.__const.3 = private unnamed_addr constant [1 x [2 x double]] [[2 x double] [double 1.000000e+00, double 2.000000e+00]], align 16
|
||||
@.str.4 = private unnamed_addr constant [15 x i8] c"%s %s {%s, %s}\00", align 1
|
||||
@"$ct.a1$a2$int" = linkonce global %.introspect { i8 14, i64 0, ptr null, i64 8, i64 ptrtoint (ptr @"$ct.a2$int" to i64), i64 1, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.a1$a2$double" = linkonce global %.introspect { i8 14, i64 0, ptr null, i64 16, i64 ptrtoint (ptr @"$ct.a2$double" to i64), i64 1, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.a2$double" = linkonce global %.introspect { i8 14, i64 0, ptr null, i64 16, i64 ptrtoint (ptr @"$ct.double" to i64), i64 2, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.a1$a2$int" = linkonce global %.introspect { i8 15, i64 0, ptr null, i64 8, i64 ptrtoint (ptr @"$ct.a2$int" to i64), i64 1, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.a1$a2$double" = linkonce global %.introspect { i8 15, i64 0, ptr null, i64 16, i64 ptrtoint (ptr @"$ct.a2$double" to i64), i64 1, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.a2$double" = linkonce global %.introspect { i8 15, i64 0, ptr null, i64 16, i64 ptrtoint (ptr @"$ct.double" to i64), i64 2, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.double" = linkonce global %.introspect { i8 4, i64 0, ptr null, i64 8, i64 0, i64 0, [0 x i64] zeroinitializer }, align 8
|
||||
@.__const.5 = private unnamed_addr constant [2 x i32] [i32 1, i32 2], align 4
|
||||
@.__const.6 = private unnamed_addr constant [2 x i32] [i32 3, i32 4], align 4
|
||||
|
||||
@@ -29,9 +29,9 @@ fn void main()
|
||||
@.str.1 = private unnamed_addr constant [2 x i8] c"b\00", align 1
|
||||
@"$ct.double" = linkonce global %.introspect { i8 4, i64 0, ptr null, i64 8, i64 0, i64 0, [0 x i64] zeroinitializer }, align 8
|
||||
@.__const = private unnamed_addr constant [2 x %ReflectedParam] [%ReflectedParam { %"char[]" { ptr @.str, i64 1 }, i64 ptrtoint (ptr @"$ct.int" to i64) }, %ReflectedParam { %"char[]" { ptr @.str.1, i64 1 }, i64 ptrtoint (ptr @"$ct.double" to i64) }], align 16
|
||||
@"$ct.std.io.File" = linkonce global %.introspect { i8 9, i64 0, ptr null, i64 8, i64 0, i64 1, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.std.io.File" = linkonce global %.introspect { i8 10, i64 0, ptr null, i64 8, i64 0, i64 1, [0 x i64] zeroinitializer }, align 8
|
||||
@.str.2 = private unnamed_addr constant [3 x i8] c"%s\00", align 1
|
||||
@"$ct.ReflectedParam" = linkonce global %.introspect { i8 9, i64 0, ptr null, i64 24, i64 0, i64 2, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.ReflectedParam" = linkonce global %.introspect { i8 10, i64 0, ptr null, i64 24, i64 0, i64 2, [0 x i64] zeroinitializer }, align 8
|
||||
@.str.3 = private unnamed_addr constant [2 x i8] c"a\00", align 1
|
||||
@.str.4 = private unnamed_addr constant [4 x i8] c"int\00", align 1
|
||||
@.str.5 = private unnamed_addr constant [2 x i8] c"b\00", align 1
|
||||
|
||||
@@ -20,8 +20,8 @@ fn void main()
|
||||
|
||||
/* #expect: foo.ll
|
||||
|
||||
@"$ct.foo.Foo" = linkonce global %.introspect { i8 9, i64 0, ptr null, i64 4, i64 0, i64 1, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.foo.Bar" = linkonce global %.introspect { i8 9, i64 ptrtoint (ptr @"$ct.foo.Foo" to i64), ptr null, i64 4, i64 0, i64 1, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.foo.Foo" = linkonce global %.introspect { i8 10, i64 0, ptr null, i64 4, i64 0, i64 1, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.foo.Bar" = linkonce global %.introspect { i8 10, i64 ptrtoint (ptr @"$ct.foo.Foo" to i64), ptr null, i64 4, i64 0, i64 1, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.void" = linkonce global %.introspect { i8 0, i64 0, ptr null, i64 1, i64 0, i64 0, [0 x i64] zeroinitializer }, align 8
|
||||
|
||||
; Function Attrs:
|
||||
|
||||
@@ -22,7 +22,7 @@ fn void main()
|
||||
|
||||
/* #expect: qnametest.ll
|
||||
|
||||
@"$ct.qnametest.Blob" = linkonce global %.introspect { i8 9, i64 0, ptr null, i64 8, i64 0, i64 2, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.qnametest.Blob" = linkonce global %.introspect { i8 10, i64 0, ptr null, i64 8, i64 0, i64 2, [0 x i64] zeroinitializer }, align 8
|
||||
@qnametest.x = local_unnamed_addr global i32 0, align 4
|
||||
@.str = private unnamed_addr constant [12 x i8] c"printf: %s\0A\00", align 1
|
||||
@.str.1 = private unnamed_addr constant [7 x i8] c"printf\00", align 1
|
||||
|
||||
@@ -23,7 +23,7 @@ fn void main()
|
||||
%.introspect = type { i8, i64, ptr, i64, i64, i64, [0 x i64] }
|
||||
%any = type { ptr, i64 }
|
||||
|
||||
@"$ct.test.Ghh" = linkonce global %.introspect { i8 9, i64 0, ptr null, i64 12, i64 0, i64 3, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.test.Ghh" = linkonce global %.introspect { i8 10, i64 0, ptr null, i64 12, i64 0, i64 3, [0 x i64] zeroinitializer }, align 8
|
||||
@.str = private unnamed_addr constant [3 x i8] c"%d\00", align 1
|
||||
@"$ct.int" = linkonce global %.introspect { i8 2, i64 0, ptr null, i64 4, i64 0, i64 0, [0 x i64] zeroinitializer }, align 8
|
||||
|
||||
|
||||
@@ -58,9 +58,9 @@ fn void main() {
|
||||
|
||||
/* #expect: test.ll
|
||||
|
||||
@"$ct.test.Aa" = linkonce global %.introspect { i8 9, i64 0, ptr null, i64 4, i64 0, i64 1, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.test.Ba" = linkonce global %.introspect { i8 9, i64 0, ptr null, i64 4, i64 0, i64 1, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.test.Ca" = linkonce global %.introspect { i8 9, i64 0, ptr null, i64 4, i64 0, i64 1, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.test.Aa" = linkonce global %.introspect { i8 10, i64 0, ptr null, i64 4, i64 0, i64 1, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.test.Ba" = linkonce global %.introspect { i8 10, i64 0, ptr null, i64 4, i64 0, i64 1, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.test.Ca" = linkonce global %.introspect { i8 10, i64 0, ptr null, i64 4, i64 0, i64 1, [0 x i64] zeroinitializer }, align 8
|
||||
@"$sel.foo" = linkonce_odr constant [4 x i8] c"foo\00", align 1
|
||||
@"$c3_dynamic" = internal global [3 x { ptr, ptr, i64 }] [{ ptr, ptr, i64 } { ptr @test.Aa.foo, ptr @"$sel.foo", i64 ptrtoint (ptr @"$ct.test.Aa" to i64) }, { ptr, ptr, i64 } { ptr @test.Ba.foo, ptr @"$sel.foo", i64 ptrtoint (ptr @"$ct.test.Ba" to i64) }, { ptr, ptr, i64 } { ptr @test.Ca.foo, ptr @"$sel.foo", i64 ptrtoint (ptr @"$ct.test.Ca" to i64) }], section "__DATA,__c3_dynamic", no_sanitize_address, align 8
|
||||
@llvm.global_ctors = appending global [1 x { i32, ptr, ptr }] [{ i32, ptr, ptr } { i32 1, ptr @.c3_dynamic_retain, ptr null }], no_sanitize_address
|
||||
|
||||
@@ -45,7 +45,7 @@ $.dyn_search = comdat any
|
||||
$"$ct.inherit.Test" = comdat any
|
||||
$"$sel.tesT" = comdat any
|
||||
$"$sel.hello" = comdat any
|
||||
@"$ct.inherit.Test" = linkonce global %.introspect { i8 9, i64 0, ptr null, i64 8, i64 0, i64 1, [0 x i64] zeroinitializer }, comdat, align 8
|
||||
@"$ct.inherit.Test" = linkonce global %.introspect { i8 10, i64 0, ptr null, i64 8, i64 0, i64 1, [0 x i64] zeroinitializer }, comdat, align 8
|
||||
@"$sel.tesT" = linkonce_odr constant [5 x i8] c"tesT\00", comdat, align 1
|
||||
@.panic_msg = internal constant [42 x i8] c"No method 'tesT' could be found on target\00", align 1
|
||||
@.func = internal constant [5 x i8] c"main\00", align 1
|
||||
|
||||
@@ -42,7 +42,7 @@ fn void main()
|
||||
%.introspect = type { i8, i64, ptr, i64, i64, i64, [0 x i64] }
|
||||
%any = type { ptr, i64 }
|
||||
|
||||
@"$ct.inherit.Test" = linkonce global %.introspect { i8 9, i64 0, ptr null, i64 8, i64 0, i64 1, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.inherit.Test" = linkonce global %.introspect { i8 10, i64 0, ptr null, i64 8, i64 0, i64 1, [0 x i64] zeroinitializer }, align 8
|
||||
@"$sel.tesT" = linkonce_odr constant [5 x i8] c"tesT\00", align 1
|
||||
@.panic_msg = internal constant [42 x i8] c"No method 'tesT' could be found on target\00", align 1
|
||||
@.func = internal constant [5 x i8] c"main\00", align 1
|
||||
|
||||
@@ -36,7 +36,7 @@ fn void main()
|
||||
%.introspect = type { i8, i64, ptr, i64, i64, i64, [0 x i64] }
|
||||
%any = type { ptr, i64 }
|
||||
|
||||
@"$ct.overlap.Test" = linkonce global %.introspect { i8 9, i64 0, ptr null, i64 8, i64 0, i64 1, [0 x i64] zeroinitializer }, comdat, align 8
|
||||
@"$ct.overlap.Test" = linkonce global %.introspect { i8 10, i64 0, ptr null, i64 8, i64 0, i64 1, [0 x i64] zeroinitializer }, comdat, align 8
|
||||
@"$sel.tesT" = linkonce_odr constant [5 x i8] c"tesT\00", comdat, align 1
|
||||
@.panic_msg = internal constant [42 x i8] c"No method 'tesT' could be found on target\00", align 1
|
||||
@.file = internal constant [30 x i8] c"overlapping_function_linux.c3\00", align 1
|
||||
|
||||
@@ -35,7 +35,7 @@ fn void main()
|
||||
%.introspect = type { i8, i64, ptr, i64, i64, i64, [0 x i64] }
|
||||
%any = type { ptr, i64 }
|
||||
|
||||
@"$ct.overlap.Test" = linkonce global %.introspect { i8 9, i64 0, ptr null, i64 8, i64 0, i64 1, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.overlap.Test" = linkonce global %.introspect { i8 10, i64 0, ptr null, i64 8, i64 0, i64 1, [0 x i64] zeroinitializer }, align 8
|
||||
@"$sel.tesT" = linkonce_odr constant [5 x i8] c"tesT\00", align 1
|
||||
@.panic_msg = internal constant [42 x i8] c"No method 'tesT' could be found on target\00", align 1
|
||||
@.file = internal constant [30 x i8] c"overlapping_function_macos.c3\00", align 1
|
||||
|
||||
@@ -27,7 +27,7 @@ enum Foo : int (String val)
|
||||
%.introspect = type { i8, i64, ptr, i64, i64, i64, [0 x i64] }
|
||||
%"char[]" = type { ptr, i64 }
|
||||
|
||||
@"$ct.abc.Abc" = linkonce global %.introspect { i8 9, i64 0, ptr null, i64 4, i64 0, i64 1, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.abc.Abc" = linkonce global %.introspect { i8 10, i64 0, ptr null, i64 4, i64 0, i64 1, [0 x i64] zeroinitializer }, align 8
|
||||
@.enum.ABC = internal constant [4 x i8] c"ABC\00", align 1
|
||||
@.enum.DEF = internal constant [4 x i8] c"DEF\00", align 1
|
||||
@"$ct.int" = linkonce global %.introspect { i8 2, i64 0, ptr null, i64 4, i64 0, i64 0, [0 x i64] zeroinitializer }, align 8
|
||||
|
||||
@@ -2,23 +2,24 @@ enum Abc : char { ABC }
|
||||
|
||||
fn void foo()
|
||||
{
|
||||
Abc x = Abc.from_ordinal(10); // #error: exceeds the max
|
||||
|
||||
Abc x = (Abc)10; // #error: exceeds the max
|
||||
}
|
||||
|
||||
fn void bar()
|
||||
{
|
||||
int a;
|
||||
Abc x = Abc.from_ordinal(a);
|
||||
Abc x = (Abc)a;
|
||||
}
|
||||
|
||||
fn void baz()
|
||||
{
|
||||
int a;
|
||||
Abc x = Abc.from_ordinal(0);
|
||||
Abc x = (Abc)0;
|
||||
}
|
||||
|
||||
fn void abc()
|
||||
{
|
||||
int a;
|
||||
Abc x = Abc.from_ordinal(-1); // #error: negative number
|
||||
Abc x = (Abc)-1; // #error: negative number
|
||||
}
|
||||
701
test/test_suite/enumerations/enum_const.c3t
Normal file
701
test/test_suite/enumerations/enum_const.c3t
Normal file
@@ -0,0 +1,701 @@
|
||||
// #target: macos-x64
|
||||
module test;
|
||||
import std;
|
||||
|
||||
enum Bar : const String
|
||||
{
|
||||
XABC = "foekf",
|
||||
XDEF = "foekfokef"
|
||||
}
|
||||
|
||||
enum Foo : const int
|
||||
{
|
||||
ABC = 4,
|
||||
DEF,
|
||||
EGH = Foo.ABC + 10,
|
||||
GHH,
|
||||
HELLO = DEF
|
||||
}
|
||||
|
||||
|
||||
enum Bde2 : const int
|
||||
{
|
||||
FOO = 2,
|
||||
BAR = 100
|
||||
}
|
||||
|
||||
typedef Bde3 = int;
|
||||
const BDE3_FOO = 2;
|
||||
const BDE3_BAR = 100;
|
||||
|
||||
|
||||
|
||||
enum Abc2 : const int
|
||||
{
|
||||
UP,
|
||||
DOWN,
|
||||
}
|
||||
|
||||
|
||||
typedef Abc4 = int;
|
||||
const Abc4 ABC4_UP = 0b10;
|
||||
const Abc4 ABC4_DOWN = 0b01;
|
||||
|
||||
bitstruct Abc3 : int
|
||||
{
|
||||
bool down : 0;
|
||||
bool up : 1;
|
||||
}
|
||||
|
||||
fn void print_bde2(Bde2 v)
|
||||
{
|
||||
if (v == Bde2.FOO) io::printn("FOO!!");
|
||||
}
|
||||
|
||||
fn void print_bde3(Bde3 v)
|
||||
{
|
||||
if (v == BDE3_FOO) io::printn("FOO!!");
|
||||
}
|
||||
|
||||
|
||||
fn void print_direction2(Abc2 a)
|
||||
{
|
||||
if (a & Abc2.UP) io::printn("Up");
|
||||
if (a & Abc2.DOWN) io::printn("Down");
|
||||
}
|
||||
|
||||
fn void print_direction4(Abc4 a)
|
||||
{
|
||||
if (a & ABC4_UP) io::printn("Up");
|
||||
if (a & ABC4_DOWN) io::printn("Down");
|
||||
}
|
||||
|
||||
fn void print_direction3(Abc3 a)
|
||||
{
|
||||
if (a.up) io::printn("Up");
|
||||
if (a.down) io::printn("Down");
|
||||
}
|
||||
|
||||
fn void main()
|
||||
{
|
||||
print_direction2(Abc2.UP | Abc2.DOWN);
|
||||
print_direction4(ABC4_UP | ABC4_DOWN);
|
||||
print_direction3({ .up, .down });
|
||||
print_bde2(FOO);
|
||||
print_bde3(BDE3_FOO);
|
||||
|
||||
}
|
||||
|
||||
fn int test()
|
||||
{
|
||||
Bar bar = XDEF;
|
||||
Foo f = ABC;
|
||||
Foo b = Foo.ABC * Foo.ABC;
|
||||
int x = (int)Foo.ABC;
|
||||
Foo e = (Foo)4;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* #expect: test.ll
|
||||
|
||||
define void @test.print_bde2(i32 %0) #0 {
|
||||
entry:
|
||||
%len = alloca i64, align 8
|
||||
%error_var = alloca i64, align 8
|
||||
%retparam = alloca i64, align 8
|
||||
%error_var2 = alloca i64, align 8
|
||||
%error_var8 = alloca i64, align 8
|
||||
%eq = icmp eq i32 %0, 2
|
||||
br i1 %eq, label %if.then, label %if.exit
|
||||
|
||||
if.then: ; preds = %entry
|
||||
%1 = call ptr @std.io.stdout()
|
||||
%2 = call i64 @std.io.File.write(ptr %retparam, ptr %1, ptr @.str, i64 5)
|
||||
%not_err = icmp eq i64 %2, 0
|
||||
%3 = call i1 @llvm.expect.i1(i1 %not_err, i1 true)
|
||||
br i1 %3, label %after_check, label %assign_optional
|
||||
|
||||
assign_optional: ; preds = %if.then
|
||||
store i64 %2, ptr %error_var, align 8
|
||||
br label %guard_block
|
||||
|
||||
after_check: ; preds = %if.then
|
||||
br label %noerr_block
|
||||
|
||||
guard_block: ; preds = %assign_optional
|
||||
br label %voiderr
|
||||
|
||||
noerr_block: ; preds = %after_check
|
||||
%4 = load i64, ptr %retparam, align 8
|
||||
store i64 %4, ptr %len, align 8
|
||||
%5 = call i64 @std.io.File.write_byte(ptr %1, i8 zeroext 10)
|
||||
%not_err3 = icmp eq i64 %5, 0
|
||||
%6 = call i1 @llvm.expect.i1(i1 %not_err3, i1 true)
|
||||
br i1 %6, label %after_check5, label %assign_optional4
|
||||
|
||||
assign_optional4: ; preds = %noerr_block
|
||||
store i64 %5, ptr %error_var2, align 8
|
||||
br label %guard_block6
|
||||
|
||||
after_check5: ; preds = %noerr_block
|
||||
br label %noerr_block7
|
||||
|
||||
guard_block6: ; preds = %assign_optional4
|
||||
br label %voiderr
|
||||
|
||||
noerr_block7: ; preds = %after_check5
|
||||
%7 = call i64 @std.io.File.flush(ptr %1)
|
||||
%not_err9 = icmp eq i64 %7, 0
|
||||
%8 = call i1 @llvm.expect.i1(i1 %not_err9, i1 true)
|
||||
br i1 %8, label %after_check11, label %assign_optional10
|
||||
|
||||
assign_optional10: ; preds = %noerr_block7
|
||||
store i64 %7, ptr %error_var8, align 8
|
||||
br label %guard_block12
|
||||
|
||||
after_check11: ; preds = %noerr_block7
|
||||
br label %noerr_block13
|
||||
|
||||
guard_block12: ; preds = %assign_optional10
|
||||
br label %voiderr
|
||||
|
||||
noerr_block13: ; preds = %after_check11
|
||||
%9 = load i64, ptr %len, align 8
|
||||
%add = add i64 %9, 1
|
||||
br label %voiderr
|
||||
|
||||
voiderr: ; preds = %noerr_block13, %guard_block12, %guard_block6, %guard_block
|
||||
br label %if.exit
|
||||
|
||||
if.exit: ; preds = %voiderr, %entry
|
||||
ret void
|
||||
}
|
||||
|
||||
define void @test.print_bde3(i32 %0) #0 {
|
||||
entry:
|
||||
%len = alloca i64, align 8
|
||||
%error_var = alloca i64, align 8
|
||||
%retparam = alloca i64, align 8
|
||||
%error_var2 = alloca i64, align 8
|
||||
%error_var8 = alloca i64, align 8
|
||||
%eq = icmp eq i32 %0, 2
|
||||
br i1 %eq, label %if.then, label %if.exit
|
||||
|
||||
if.then: ; preds = %entry
|
||||
%1 = call ptr @std.io.stdout()
|
||||
%2 = call i64 @std.io.File.write(ptr %retparam, ptr %1, ptr @.str.4, i64 5)
|
||||
%not_err = icmp eq i64 %2, 0
|
||||
%3 = call i1 @llvm.expect.i1(i1 %not_err, i1 true)
|
||||
br i1 %3, label %after_check, label %assign_optional
|
||||
|
||||
assign_optional: ; preds = %if.then
|
||||
store i64 %2, ptr %error_var, align 8
|
||||
br label %guard_block
|
||||
|
||||
after_check: ; preds = %if.then
|
||||
br label %noerr_block
|
||||
|
||||
guard_block: ; preds = %assign_optional
|
||||
br label %voiderr
|
||||
|
||||
noerr_block: ; preds = %after_check
|
||||
%4 = load i64, ptr %retparam, align 8
|
||||
store i64 %4, ptr %len, align 8
|
||||
%5 = call i64 @std.io.File.write_byte(ptr %1, i8 zeroext 10)
|
||||
%not_err3 = icmp eq i64 %5, 0
|
||||
%6 = call i1 @llvm.expect.i1(i1 %not_err3, i1 true)
|
||||
br i1 %6, label %after_check5, label %assign_optional4
|
||||
|
||||
assign_optional4: ; preds = %noerr_block
|
||||
store i64 %5, ptr %error_var2, align 8
|
||||
br label %guard_block6
|
||||
|
||||
after_check5: ; preds = %noerr_block
|
||||
br label %noerr_block7
|
||||
|
||||
guard_block6: ; preds = %assign_optional4
|
||||
br label %voiderr
|
||||
|
||||
noerr_block7: ; preds = %after_check5
|
||||
%7 = call i64 @std.io.File.flush(ptr %1)
|
||||
%not_err9 = icmp eq i64 %7, 0
|
||||
%8 = call i1 @llvm.expect.i1(i1 %not_err9, i1 true)
|
||||
br i1 %8, label %after_check11, label %assign_optional10
|
||||
|
||||
assign_optional10: ; preds = %noerr_block7
|
||||
store i64 %7, ptr %error_var8, align 8
|
||||
br label %guard_block12
|
||||
|
||||
after_check11: ; preds = %noerr_block7
|
||||
br label %noerr_block13
|
||||
|
||||
guard_block12: ; preds = %assign_optional10
|
||||
br label %voiderr
|
||||
|
||||
noerr_block13: ; preds = %after_check11
|
||||
%9 = load i64, ptr %len, align 8
|
||||
%add = add i64 %9, 1
|
||||
br label %voiderr
|
||||
|
||||
voiderr: ; preds = %noerr_block13, %guard_block12, %guard_block6, %guard_block
|
||||
br label %if.exit
|
||||
|
||||
if.exit: ; preds = %voiderr, %entry
|
||||
ret void
|
||||
}
|
||||
|
||||
define void @test.print_direction2(i32 %0) #0 {
|
||||
entry:
|
||||
%len = alloca i64, align 8
|
||||
%error_var = alloca i64, align 8
|
||||
%retparam = alloca i64, align 8
|
||||
%error_var2 = alloca i64, align 8
|
||||
%error_var8 = alloca i64, align 8
|
||||
%len17 = alloca i64, align 8
|
||||
%error_var18 = alloca i64, align 8
|
||||
%retparam20 = alloca i64, align 8
|
||||
%error_var26 = alloca i64, align 8
|
||||
%error_var32 = alloca i64, align 8
|
||||
%and = and i32 %0, 0
|
||||
%i2b = icmp ne i32 %and, 0
|
||||
br i1 %i2b, label %if.then, label %if.exit
|
||||
|
||||
if.then: ; preds = %entry
|
||||
%1 = call ptr @std.io.stdout()
|
||||
%2 = call i64 @std.io.File.write(ptr %retparam, ptr %1, ptr @.str.5, i64 2)
|
||||
%not_err = icmp eq i64 %2, 0
|
||||
%3 = call i1 @llvm.expect.i1(i1 %not_err, i1 true)
|
||||
br i1 %3, label %after_check, label %assign_optional
|
||||
|
||||
assign_optional: ; preds = %if.then
|
||||
store i64 %2, ptr %error_var, align 8
|
||||
br label %guard_block
|
||||
|
||||
after_check: ; preds = %if.then
|
||||
br label %noerr_block
|
||||
|
||||
guard_block: ; preds = %assign_optional
|
||||
br label %voiderr
|
||||
|
||||
noerr_block: ; preds = %after_check
|
||||
%4 = load i64, ptr %retparam, align 8
|
||||
store i64 %4, ptr %len, align 8
|
||||
%5 = call i64 @std.io.File.write_byte(ptr %1, i8 zeroext 10)
|
||||
%not_err3 = icmp eq i64 %5, 0
|
||||
%6 = call i1 @llvm.expect.i1(i1 %not_err3, i1 true)
|
||||
br i1 %6, label %after_check5, label %assign_optional4
|
||||
|
||||
assign_optional4: ; preds = %noerr_block
|
||||
store i64 %5, ptr %error_var2, align 8
|
||||
br label %guard_block6
|
||||
|
||||
after_check5: ; preds = %noerr_block
|
||||
br label %noerr_block7
|
||||
|
||||
guard_block6: ; preds = %assign_optional4
|
||||
br label %voiderr
|
||||
|
||||
noerr_block7: ; preds = %after_check5
|
||||
%7 = call i64 @std.io.File.flush(ptr %1)
|
||||
%not_err9 = icmp eq i64 %7, 0
|
||||
%8 = call i1 @llvm.expect.i1(i1 %not_err9, i1 true)
|
||||
br i1 %8, label %after_check11, label %assign_optional10
|
||||
|
||||
assign_optional10: ; preds = %noerr_block7
|
||||
store i64 %7, ptr %error_var8, align 8
|
||||
br label %guard_block12
|
||||
|
||||
after_check11: ; preds = %noerr_block7
|
||||
br label %noerr_block13
|
||||
|
||||
guard_block12: ; preds = %assign_optional10
|
||||
br label %voiderr
|
||||
|
||||
noerr_block13: ; preds = %after_check11
|
||||
%9 = load i64, ptr %len, align 8
|
||||
%add = add i64 %9, 1
|
||||
br label %voiderr
|
||||
|
||||
voiderr: ; preds = %noerr_block13, %guard_block12, %guard_block6, %guard_block
|
||||
br label %if.exit
|
||||
|
||||
if.exit: ; preds = %voiderr, %entry
|
||||
%and14 = and i32 %0, 1
|
||||
%i2b15 = icmp ne i32 %and14, 0
|
||||
br i1 %i2b15, label %if.then16, label %if.exit40
|
||||
|
||||
if.then16: ; preds = %if.exit
|
||||
%10 = call ptr @std.io.stdout()
|
||||
%11 = call i64 @std.io.File.write(ptr %retparam20, ptr %10, ptr @.str.6, i64 4)
|
||||
%not_err21 = icmp eq i64 %11, 0
|
||||
%12 = call i1 @llvm.expect.i1(i1 %not_err21, i1 true)
|
||||
br i1 %12, label %after_check23, label %assign_optional22
|
||||
|
||||
assign_optional22: ; preds = %if.then16
|
||||
store i64 %11, ptr %error_var18, align 8
|
||||
br label %guard_block24
|
||||
|
||||
after_check23: ; preds = %if.then16
|
||||
br label %noerr_block25
|
||||
|
||||
guard_block24: ; preds = %assign_optional22
|
||||
br label %voiderr39
|
||||
|
||||
noerr_block25: ; preds = %after_check23
|
||||
%13 = load i64, ptr %retparam20, align 8
|
||||
store i64 %13, ptr %len17, align 8
|
||||
%14 = call i64 @std.io.File.write_byte(ptr %10, i8 zeroext 10)
|
||||
%not_err27 = icmp eq i64 %14, 0
|
||||
%15 = call i1 @llvm.expect.i1(i1 %not_err27, i1 true)
|
||||
br i1 %15, label %after_check29, label %assign_optional28
|
||||
|
||||
assign_optional28: ; preds = %noerr_block25
|
||||
store i64 %14, ptr %error_var26, align 8
|
||||
br label %guard_block30
|
||||
|
||||
after_check29: ; preds = %noerr_block25
|
||||
br label %noerr_block31
|
||||
|
||||
guard_block30: ; preds = %assign_optional28
|
||||
br label %voiderr39
|
||||
|
||||
noerr_block31: ; preds = %after_check29
|
||||
%16 = call i64 @std.io.File.flush(ptr %10)
|
||||
%not_err33 = icmp eq i64 %16, 0
|
||||
%17 = call i1 @llvm.expect.i1(i1 %not_err33, i1 true)
|
||||
br i1 %17, label %after_check35, label %assign_optional34
|
||||
|
||||
assign_optional34: ; preds = %noerr_block31
|
||||
store i64 %16, ptr %error_var32, align 8
|
||||
br label %guard_block36
|
||||
|
||||
after_check35: ; preds = %noerr_block31
|
||||
br label %noerr_block37
|
||||
|
||||
guard_block36: ; preds = %assign_optional34
|
||||
br label %voiderr39
|
||||
|
||||
noerr_block37: ; preds = %after_check35
|
||||
%18 = load i64, ptr %len17, align 8
|
||||
%add38 = add i64 %18, 1
|
||||
br label %voiderr39
|
||||
|
||||
voiderr39: ; preds = %noerr_block37, %guard_block36, %guard_block30, %guard_block24
|
||||
br label %if.exit40
|
||||
|
||||
if.exit40: ; preds = %voiderr39, %if.exit
|
||||
ret void
|
||||
}
|
||||
|
||||
define void @test.print_direction4(i32 %0) #0 {
|
||||
entry:
|
||||
%len = alloca i64, align 8
|
||||
%error_var = alloca i64, align 8
|
||||
%retparam = alloca i64, align 8
|
||||
%error_var2 = alloca i64, align 8
|
||||
%error_var8 = alloca i64, align 8
|
||||
%len17 = alloca i64, align 8
|
||||
%error_var18 = alloca i64, align 8
|
||||
%retparam20 = alloca i64, align 8
|
||||
%error_var26 = alloca i64, align 8
|
||||
%error_var32 = alloca i64, align 8
|
||||
%and = and i32 %0, 2
|
||||
%i2b = icmp ne i32 %and, 0
|
||||
br i1 %i2b, label %if.then, label %if.exit
|
||||
|
||||
if.then: ; preds = %entry
|
||||
%1 = call ptr @std.io.stdout()
|
||||
%2 = call i64 @std.io.File.write(ptr %retparam, ptr %1, ptr @.str.7, i64 2)
|
||||
%not_err = icmp eq i64 %2, 0
|
||||
%3 = call i1 @llvm.expect.i1(i1 %not_err, i1 true)
|
||||
br i1 %3, label %after_check, label %assign_optional
|
||||
|
||||
assign_optional: ; preds = %if.then
|
||||
store i64 %2, ptr %error_var, align 8
|
||||
br label %guard_block
|
||||
|
||||
after_check: ; preds = %if.then
|
||||
br label %noerr_block
|
||||
|
||||
guard_block: ; preds = %assign_optional
|
||||
br label %voiderr
|
||||
|
||||
noerr_block: ; preds = %after_check
|
||||
%4 = load i64, ptr %retparam, align 8
|
||||
store i64 %4, ptr %len, align 8
|
||||
%5 = call i64 @std.io.File.write_byte(ptr %1, i8 zeroext 10)
|
||||
%not_err3 = icmp eq i64 %5, 0
|
||||
%6 = call i1 @llvm.expect.i1(i1 %not_err3, i1 true)
|
||||
br i1 %6, label %after_check5, label %assign_optional4
|
||||
|
||||
assign_optional4: ; preds = %noerr_block
|
||||
store i64 %5, ptr %error_var2, align 8
|
||||
br label %guard_block6
|
||||
|
||||
after_check5: ; preds = %noerr_block
|
||||
br label %noerr_block7
|
||||
|
||||
guard_block6: ; preds = %assign_optional4
|
||||
br label %voiderr
|
||||
|
||||
noerr_block7: ; preds = %after_check5
|
||||
%7 = call i64 @std.io.File.flush(ptr %1)
|
||||
%not_err9 = icmp eq i64 %7, 0
|
||||
%8 = call i1 @llvm.expect.i1(i1 %not_err9, i1 true)
|
||||
br i1 %8, label %after_check11, label %assign_optional10
|
||||
|
||||
assign_optional10: ; preds = %noerr_block7
|
||||
store i64 %7, ptr %error_var8, align 8
|
||||
br label %guard_block12
|
||||
|
||||
after_check11: ; preds = %noerr_block7
|
||||
br label %noerr_block13
|
||||
|
||||
guard_block12: ; preds = %assign_optional10
|
||||
br label %voiderr
|
||||
|
||||
noerr_block13: ; preds = %after_check11
|
||||
%9 = load i64, ptr %len, align 8
|
||||
%add = add i64 %9, 1
|
||||
br label %voiderr
|
||||
|
||||
voiderr: ; preds = %noerr_block13, %guard_block12, %guard_block6, %guard_block
|
||||
br label %if.exit
|
||||
|
||||
if.exit: ; preds = %voiderr, %entry
|
||||
%and14 = and i32 %0, 1
|
||||
%i2b15 = icmp ne i32 %and14, 0
|
||||
br i1 %i2b15, label %if.then16, label %if.exit40
|
||||
|
||||
if.then16: ; preds = %if.exit
|
||||
%10 = call ptr @std.io.stdout()
|
||||
%11 = call i64 @std.io.File.write(ptr %retparam20, ptr %10, ptr @.str.8, i64 4)
|
||||
%not_err21 = icmp eq i64 %11, 0
|
||||
%12 = call i1 @llvm.expect.i1(i1 %not_err21, i1 true)
|
||||
br i1 %12, label %after_check23, label %assign_optional22
|
||||
|
||||
assign_optional22: ; preds = %if.then16
|
||||
store i64 %11, ptr %error_var18, align 8
|
||||
br label %guard_block24
|
||||
|
||||
after_check23: ; preds = %if.then16
|
||||
br label %noerr_block25
|
||||
|
||||
guard_block24: ; preds = %assign_optional22
|
||||
br label %voiderr39
|
||||
|
||||
noerr_block25: ; preds = %after_check23
|
||||
%13 = load i64, ptr %retparam20, align 8
|
||||
store i64 %13, ptr %len17, align 8
|
||||
%14 = call i64 @std.io.File.write_byte(ptr %10, i8 zeroext 10)
|
||||
%not_err27 = icmp eq i64 %14, 0
|
||||
%15 = call i1 @llvm.expect.i1(i1 %not_err27, i1 true)
|
||||
br i1 %15, label %after_check29, label %assign_optional28
|
||||
|
||||
assign_optional28: ; preds = %noerr_block25
|
||||
store i64 %14, ptr %error_var26, align 8
|
||||
br label %guard_block30
|
||||
|
||||
after_check29: ; preds = %noerr_block25
|
||||
br label %noerr_block31
|
||||
|
||||
guard_block30: ; preds = %assign_optional28
|
||||
br label %voiderr39
|
||||
|
||||
noerr_block31: ; preds = %after_check29
|
||||
%16 = call i64 @std.io.File.flush(ptr %10)
|
||||
%not_err33 = icmp eq i64 %16, 0
|
||||
%17 = call i1 @llvm.expect.i1(i1 %not_err33, i1 true)
|
||||
br i1 %17, label %after_check35, label %assign_optional34
|
||||
|
||||
assign_optional34: ; preds = %noerr_block31
|
||||
store i64 %16, ptr %error_var32, align 8
|
||||
br label %guard_block36
|
||||
|
||||
after_check35: ; preds = %noerr_block31
|
||||
br label %noerr_block37
|
||||
|
||||
guard_block36: ; preds = %assign_optional34
|
||||
br label %voiderr39
|
||||
|
||||
noerr_block37: ; preds = %after_check35
|
||||
%18 = load i64, ptr %len17, align 8
|
||||
%add38 = add i64 %18, 1
|
||||
br label %voiderr39
|
||||
|
||||
voiderr39: ; preds = %noerr_block37, %guard_block36, %guard_block30, %guard_block24
|
||||
br label %if.exit40
|
||||
|
||||
if.exit40: ; preds = %voiderr39, %if.exit
|
||||
ret void
|
||||
}
|
||||
|
||||
define void @test.print_direction3(i32 %0) #0 {
|
||||
entry:
|
||||
%len = alloca i64, align 8
|
||||
%error_var = alloca i64, align 8
|
||||
%retparam = alloca i64, align 8
|
||||
%error_var2 = alloca i64, align 8
|
||||
%error_var8 = alloca i64, align 8
|
||||
%len16 = alloca i64, align 8
|
||||
%error_var17 = alloca i64, align 8
|
||||
%retparam19 = alloca i64, align 8
|
||||
%error_var25 = alloca i64, align 8
|
||||
%error_var31 = alloca i64, align 8
|
||||
%lshrl = lshr i32 %0, 1
|
||||
%1 = and i32 1, %lshrl
|
||||
%trunc = trunc i32 %1 to i8
|
||||
%2 = trunc i8 %trunc to i1
|
||||
br i1 %2, label %if.then, label %if.exit
|
||||
|
||||
if.then: ; preds = %entry
|
||||
%3 = call ptr @std.io.stdout()
|
||||
%4 = call i64 @std.io.File.write(ptr %retparam, ptr %3, ptr @.str.9, i64 2)
|
||||
%not_err = icmp eq i64 %4, 0
|
||||
%5 = call i1 @llvm.expect.i1(i1 %not_err, i1 true)
|
||||
br i1 %5, label %after_check, label %assign_optional
|
||||
|
||||
assign_optional: ; preds = %if.then
|
||||
store i64 %4, ptr %error_var, align 8
|
||||
br label %guard_block
|
||||
|
||||
after_check: ; preds = %if.then
|
||||
br label %noerr_block
|
||||
|
||||
guard_block: ; preds = %assign_optional
|
||||
br label %voiderr
|
||||
|
||||
noerr_block: ; preds = %after_check
|
||||
%6 = load i64, ptr %retparam, align 8
|
||||
store i64 %6, ptr %len, align 8
|
||||
%7 = call i64 @std.io.File.write_byte(ptr %3, i8 zeroext 10)
|
||||
%not_err3 = icmp eq i64 %7, 0
|
||||
%8 = call i1 @llvm.expect.i1(i1 %not_err3, i1 true)
|
||||
br i1 %8, label %after_check5, label %assign_optional4
|
||||
|
||||
assign_optional4: ; preds = %noerr_block
|
||||
store i64 %7, ptr %error_var2, align 8
|
||||
br label %guard_block6
|
||||
|
||||
after_check5: ; preds = %noerr_block
|
||||
br label %noerr_block7
|
||||
|
||||
guard_block6: ; preds = %assign_optional4
|
||||
br label %voiderr
|
||||
|
||||
noerr_block7: ; preds = %after_check5
|
||||
%9 = call i64 @std.io.File.flush(ptr %3)
|
||||
%not_err9 = icmp eq i64 %9, 0
|
||||
%10 = call i1 @llvm.expect.i1(i1 %not_err9, i1 true)
|
||||
br i1 %10, label %after_check11, label %assign_optional10
|
||||
|
||||
assign_optional10: ; preds = %noerr_block7
|
||||
store i64 %9, ptr %error_var8, align 8
|
||||
br label %guard_block12
|
||||
|
||||
after_check11: ; preds = %noerr_block7
|
||||
br label %noerr_block13
|
||||
|
||||
guard_block12: ; preds = %assign_optional10
|
||||
br label %voiderr
|
||||
|
||||
noerr_block13: ; preds = %after_check11
|
||||
%11 = load i64, ptr %len, align 8
|
||||
%add = add i64 %11, 1
|
||||
br label %voiderr
|
||||
|
||||
voiderr: ; preds = %noerr_block13, %guard_block12, %guard_block6, %guard_block
|
||||
br label %if.exit
|
||||
|
||||
if.exit: ; preds = %voiderr, %entry
|
||||
%12 = and i32 1, %0
|
||||
%trunc14 = trunc i32 %12 to i8
|
||||
%13 = trunc i8 %trunc14 to i1
|
||||
br i1 %13, label %if.then15, label %if.exit39
|
||||
|
||||
if.then15: ; preds = %if.exit
|
||||
%14 = call ptr @std.io.stdout()
|
||||
%15 = call i64 @std.io.File.write(ptr %retparam19, ptr %14, ptr @.str.10, i64 4)
|
||||
%not_err20 = icmp eq i64 %15, 0
|
||||
%16 = call i1 @llvm.expect.i1(i1 %not_err20, i1 true)
|
||||
br i1 %16, label %after_check22, label %assign_optional21
|
||||
|
||||
assign_optional21: ; preds = %if.then15
|
||||
store i64 %15, ptr %error_var17, align 8
|
||||
br label %guard_block23
|
||||
|
||||
after_check22: ; preds = %if.then15
|
||||
br label %noerr_block24
|
||||
|
||||
guard_block23: ; preds = %assign_optional21
|
||||
br label %voiderr38
|
||||
|
||||
noerr_block24: ; preds = %after_check22
|
||||
%17 = load i64, ptr %retparam19, align 8
|
||||
store i64 %17, ptr %len16, align 8
|
||||
%18 = call i64 @std.io.File.write_byte(ptr %14, i8 zeroext 10)
|
||||
%not_err26 = icmp eq i64 %18, 0
|
||||
%19 = call i1 @llvm.expect.i1(i1 %not_err26, i1 true)
|
||||
br i1 %19, label %after_check28, label %assign_optional27
|
||||
|
||||
assign_optional27: ; preds = %noerr_block24
|
||||
store i64 %18, ptr %error_var25, align 8
|
||||
br label %guard_block29
|
||||
|
||||
after_check28: ; preds = %noerr_block24
|
||||
br label %noerr_block30
|
||||
|
||||
guard_block29: ; preds = %assign_optional27
|
||||
br label %voiderr38
|
||||
|
||||
noerr_block30: ; preds = %after_check28
|
||||
%20 = call i64 @std.io.File.flush(ptr %14)
|
||||
%not_err32 = icmp eq i64 %20, 0
|
||||
%21 = call i1 @llvm.expect.i1(i1 %not_err32, i1 true)
|
||||
br i1 %21, label %after_check34, label %assign_optional33
|
||||
|
||||
assign_optional33: ; preds = %noerr_block30
|
||||
store i64 %20, ptr %error_var31, align 8
|
||||
br label %guard_block35
|
||||
|
||||
after_check34: ; preds = %noerr_block30
|
||||
br label %noerr_block36
|
||||
|
||||
guard_block35: ; preds = %assign_optional33
|
||||
br label %voiderr38
|
||||
|
||||
noerr_block36: ; preds = %after_check34
|
||||
%22 = load i64, ptr %len16, align 8
|
||||
%add37 = add i64 %22, 1
|
||||
br label %voiderr38
|
||||
|
||||
voiderr38: ; preds = %noerr_block36, %guard_block35, %guard_block29, %guard_block23
|
||||
br label %if.exit39
|
||||
|
||||
if.exit39: ; preds = %voiderr38, %if.exit
|
||||
ret void
|
||||
}
|
||||
define void @test.main() #0 {
|
||||
entry:
|
||||
call void @test.print_direction2(i32 1)
|
||||
call void @test.print_direction4(i32 3)
|
||||
call void @test.print_direction3(i32 3)
|
||||
call void @test.print_bde2(i32 2)
|
||||
call void @test.print_bde3(i32 2)
|
||||
ret void
|
||||
}
|
||||
|
||||
define i32 @test.test() #0 {
|
||||
entry:
|
||||
%bar = alloca %"char[]", align 8
|
||||
%f = alloca i32, align 4
|
||||
%b = alloca i32, align 4
|
||||
%x = alloca i32, align 4
|
||||
%e = alloca i32, align 4
|
||||
store %"char[]" { ptr @.str.11, i64 9 }, ptr %bar, align 8
|
||||
store i32 4, ptr %f, align 4
|
||||
store i32 16, ptr %b, align 4
|
||||
store i32 4, ptr %x, align 4
|
||||
store i32 4, ptr %e, align 4
|
||||
ret i32 0
|
||||
}
|
||||
@@ -6,13 +6,13 @@ enum Abc : char { ABC }
|
||||
fn void main()
|
||||
{
|
||||
int a;
|
||||
Abc x = Abc.from_ordinal(a);
|
||||
Abc x = (Abc)a;
|
||||
long z;
|
||||
Abc y = Abc.from_ordinal(z);
|
||||
Abc y = (Abc)z;
|
||||
a = 256;
|
||||
y = Abc.from_ordinal(a);
|
||||
y = (Abc)a;
|
||||
a = -1;
|
||||
y = Abc.from_ordinal(a);
|
||||
y = (Abc)a;
|
||||
}
|
||||
|
||||
/* #expect: test.ll
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
// #target: macos-x64
|
||||
/*
|
||||
module test;
|
||||
import std;
|
||||
|
||||
@@ -15,7 +16,7 @@ fn int main(String[] a)
|
||||
return x.ordinal ?? 222;
|
||||
}
|
||||
|
||||
/* #expect: test.ll
|
||||
/* expect: test.ll
|
||||
|
||||
define i32 @test.main(ptr %0, i64 %1) #0 {
|
||||
entry:
|
||||
|
||||
@@ -14,7 +14,7 @@ fn void foo(Mouse_Button button)
|
||||
|
||||
fn int main() {
|
||||
uint x = 1;
|
||||
foo(Mouse_Button.from_ordinal(x));
|
||||
foo((Mouse_Button)x);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
// #target: macos-x64
|
||||
/*
|
||||
module test;
|
||||
typedef Baz = int;
|
||||
enum Foo : char (inline Baz x)
|
||||
@@ -12,7 +13,7 @@ fn void main()
|
||||
if (y == x) return;
|
||||
}
|
||||
|
||||
/* #expect: test.ll
|
||||
/* expect: test.ll
|
||||
|
||||
define void @test.main() #0 {
|
||||
entry:
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
/*
|
||||
enum Bar : inline usz
|
||||
{
|
||||
FOO,
|
||||
@@ -17,3 +18,4 @@ fn int main()
|
||||
char[Bar2.BAR] a;
|
||||
return 0;
|
||||
}
|
||||
*/
|
||||
@@ -1,6 +1,6 @@
|
||||
// #target: macos-x64
|
||||
module test;
|
||||
|
||||
/*
|
||||
enum Abc : inline int
|
||||
{
|
||||
ABC,
|
||||
@@ -20,7 +20,7 @@ fn void main()
|
||||
String hello = Foo.ABC;
|
||||
String world = Foo.DEF;
|
||||
}
|
||||
/* #expect: test.ll
|
||||
/* expect: test.ll
|
||||
|
||||
define void @test.main() #0 {
|
||||
entry:
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
|
||||
/*
|
||||
typedef Baz = int;
|
||||
enum Foo : char (inline Baz x, String hello)
|
||||
{
|
||||
@@ -12,21 +12,22 @@ enum Bar : char (Baz x)
|
||||
|
||||
fn void test1()
|
||||
{
|
||||
(void)Bar.lookup(123); // #error: 'lookup' requires an inline associated value
|
||||
(void)Bar.lookup(123); // error: 'lookup' requires an inline associated value
|
||||
}
|
||||
|
||||
fn void test2()
|
||||
{
|
||||
Foo.lookup(123, 322); // #error: Expected one (1)
|
||||
Foo.lookup(); // #error: Expected one (1)
|
||||
Foo.lookup_field(0); // #error: requires two arguments
|
||||
Foo.lookup_field(33, 22, 44); // #error: requires two arguments
|
||||
Foo.lookup(123, 322); // error: Expected one (1)
|
||||
Foo.lookup(); // error: Expected one (1)
|
||||
Foo.lookup_field(0); // error: requires two arguments
|
||||
Foo.lookup_field(33, 22, 44); // error: requires two arguments
|
||||
}
|
||||
|
||||
fn void test3()
|
||||
{
|
||||
Foo.lookup("hello"); // #error: possible to cast 'String'
|
||||
Foo.lookup_field("hello", "hello"); // #error: identifier
|
||||
Foo.lookup_field(hello, 2); // #error: possible to cast 'int'
|
||||
Foo.lookup_field(err, 4); // #error: no associated value of
|
||||
Foo.lookup("hello"); // error: possible to cast 'String'
|
||||
Foo.lookup_field("hello", "hello"); // error: identifier
|
||||
Foo.lookup_field(hello, 2); // error: possible to cast 'int'
|
||||
Foo.lookup_field(err, 4); // error: no associated value of
|
||||
}
|
||||
*/
|
||||
@@ -24,7 +24,7 @@ fn void main()
|
||||
|
||||
%Foo = type { i32, i32 }
|
||||
|
||||
@"$ct.test.Foo" = linkonce global %.introspect { i8 9, i64 0, ptr null, i64 8, i64 0, i64 2, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.test.Foo" = linkonce global %.introspect { i8 10, i64 0, ptr null, i64 8, i64 0, i64 2, [0 x i64] zeroinitializer }, align 8
|
||||
@.str = private unnamed_addr constant [4 x i8] c"%d\0A\00", align 1
|
||||
@test.FOO = linkonce constant %"char[]" { ptr @test.FOO.nameof, i64 9 }, align 8
|
||||
@test.FOO.nameof = internal constant [10 x i8] c"test::FOO\00", align 1
|
||||
|
||||
@@ -17,7 +17,7 @@ alias Func = fn void(Enum);
|
||||
|
||||
fn void test1(Enum e)
|
||||
{
|
||||
bool a = (bool)e; // #error: bool
|
||||
bool a = (bool)e;
|
||||
char b = (char)e.ordinal;
|
||||
uint c = (uint)e.ordinal;
|
||||
float d = (float)e; // #error: float
|
||||
|
||||
@@ -63,7 +63,7 @@ target triple = "x86_64-apple
|
||||
|
||||
@"test.Foo$X" = linkonce constant %.fault { i64 ptrtoint (%.introspect* @"$ct.test.Foo" to i64), %"char[]" { i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.fault, i64 0, i64 0), i64 1 } }, align 8
|
||||
@.fault = internal constant [2 x i8] c"X\00", align 1
|
||||
@"$ct.test.Foo" = linkonce constant %.introspect { i8 9, i64 8, i64 0, i64 1, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.test.Foo" = linkonce constant %.introspect { i8 10, i64 8, i64 0, i64 1, [0 x i64] zeroinitializer }, align 8
|
||||
@.zstr = internal constant [28 x i8] c"Runtime error force unwrap!\00", align 1
|
||||
@.zstr.1 = internal constant [20 x i8] c"optional_ternary.c3\00", align 1
|
||||
@.zstr.2 = internal constant [5 x i8] c"main\00", align 1
|
||||
|
||||
@@ -42,10 +42,10 @@ fn void testSimple()
|
||||
%.anon = type { i32, i32 }
|
||||
%.anon.0 = type { double }
|
||||
|
||||
@"$ct.pointer_access.c" = linkonce global %.introspect { i8 9, i64 0, ptr null, i64 40, i64 0, i64 5, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.pointer_access.$anon" = linkonce global %.introspect { i8 9, i64 0, ptr null, i64 8, i64 0, i64 2, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.pointer_access.$anon.4" = linkonce global %.introspect { i8 10, i64 0, ptr null, i64 8, i64 0, i64 2, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.pointer_access.ExtraSimple" = linkonce global %.introspect { i8 9, i64 0, ptr null, i64 72, i64 0, i64 6, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.pointer_access.c" = linkonce global %.introspect { i8 10, i64 0, ptr null, i64 40, i64 0, i64 5, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.pointer_access.$anon" = linkonce global %.introspect { i8 10, i64 0, ptr null, i64 8, i64 0, i64 2, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.pointer_access.$anon.4" = linkonce global %.introspect { i8 11, i64 0, ptr null, i64 8, i64 0, i64 2, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.pointer_access.ExtraSimple" = linkonce global %.introspect { i8 10, i64 0, ptr null, i64 72, i64 0, i64 6, [0 x i64] zeroinitializer }, align 8
|
||||
@.str = private unnamed_addr constant [71 x i8] c"a = %d, c.e = %f, c.f = %f, c.j = %f, g = %d, o0 = %f, r = %d, s = %d\0A\00", align 1
|
||||
|
||||
define void @pointer_access.testSimple() #0 {
|
||||
|
||||
@@ -37,8 +37,8 @@ fn void main()
|
||||
@.str.2 = private unnamed_addr constant [3 x i8] c"%d\00", align 1
|
||||
@.str.3 = private unnamed_addr constant [3 x i8] c"%s\00", align 1
|
||||
@.str.4 = private unnamed_addr constant [12 x i8] c"fn int(int)\00", align 1
|
||||
@"$ct.String" = linkonce global %.introspect { i8 17, i64 ptrtoint (ptr @"$ct.sa$char" to i64), ptr null, i64 16, i64 ptrtoint (ptr @"$ct.sa$char" to i64), i64 0, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.sa$char" = linkonce global %.introspect { i8 15, i64 0, ptr null, i64 16, i64 ptrtoint (ptr @"$ct.char" to i64), i64 0, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.String" = linkonce global %.introspect { i8 18, i64 ptrtoint (ptr @"$ct.sa$char" to i64), ptr null, i64 16, i64 ptrtoint (ptr @"$ct.sa$char" to i64), i64 0, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.sa$char" = linkonce global %.introspect { i8 16, i64 0, ptr null, i64 16, i64 ptrtoint (ptr @"$ct.char" to i64), i64 0, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.char" = linkonce global %.introspect { i8 3, i64 0, ptr null, i64 1, i64 0, i64 0, [0 x i64] zeroinitializer }, align 8
|
||||
@.str.5 = private unnamed_addr constant [3 x i8] c"%s\00", align 1
|
||||
@.str.6 = private unnamed_addr constant [12 x i8] c"fn int(int)\00", align 1
|
||||
@@ -48,7 +48,7 @@ fn void main()
|
||||
@.str.10 = private unnamed_addr constant [12 x i8] c"fn int(int)\00", align 1
|
||||
@.str.11 = private unnamed_addr constant [3 x i8] c"%s\00", align 1
|
||||
@.str.12 = private unnamed_addr constant [13 x i8] c"fn int!(int)\00", align 1
|
||||
@"$ct.fn$int$int$" = linkonce global %.introspect { i8 12, i64 0, ptr null, i64 8, i64 0, i64 0, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.fn$int$int$" = linkonce global %.introspect { i8 13, i64 0, ptr null, i64 8, i64 0, i64 0, [0 x i64] zeroinitializer }, align 8
|
||||
|
||||
define void @test.main() #0 {
|
||||
entry:
|
||||
|
||||
@@ -237,11 +237,11 @@ fn Type getValue(Blob blob)
|
||||
%List = type { i64, i64, %any, ptr }
|
||||
%Foo = type { i32, i32 }
|
||||
|
||||
@"$ct.test.Bobo" = linkonce global %.introspect { i8 9, i64 0, ptr null, i64 20, i64 0, i64 6, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.test.Blob" = linkonce global %.introspect { i8 9, i64 0, ptr null, i64 8, i64 0, i64 2, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.test.Foor" = linkonce global %.introspect { i8 10, i64 0, ptr null, i64 16, i64 0, i64 2, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.test.Foo2" = linkonce global %.introspect { i8 9, i64 0, ptr null, i64 4, i64 0, i64 1, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.test.Foo" = linkonce global %.introspect { i8 9, i64 0, ptr null, i64 8, i64 0, i64 2, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.test.Bobo" = linkonce global %.introspect { i8 10, i64 0, ptr null, i64 20, i64 0, i64 6, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.test.Blob" = linkonce global %.introspect { i8 10, i64 0, ptr null, i64 8, i64 0, i64 2, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.test.Foor" = linkonce global %.introspect { i8 11, i64 0, ptr null, i64 16, i64 0, i64 2, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.test.Foo2" = linkonce global %.introspect { i8 10, i64 0, ptr null, i64 4, i64 0, i64 1, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.test.Foo" = linkonce global %.introspect { i8 10, i64 0, ptr null, i64 8, i64 0, i64 2, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.int" = linkonce global %.introspect { i8 2, i64 0, ptr null, i64 4, i64 0, i64 0, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.test.MyEnum" = linkonce global { i8, i64, ptr, i64, i64, i64, [3 x %"char[]"] } { i8 8, i64 0, ptr null, i64 4, i64 ptrtoint (ptr @"$ct.int" to i64), i64 3, [3 x %"char[]"] [%"char[]" { ptr @.enum.HELO, i64 4 }, %"char[]" { ptr @.enum.WORLD, i64 5 }, %"char[]" { ptr @.enum.BYE, i64 3 }] }, align 8
|
||||
@test_static.x = internal unnamed_addr global i32 1, align 4
|
||||
|
||||
@@ -253,11 +253,11 @@ $"$ct.int" = comdat any
|
||||
|
||||
$"$ct.test.MyEnum" = comdat any
|
||||
|
||||
@"$ct.test.Bobo" = linkonce global %.introspect { i8 9, i64 0, ptr null, i64 20, i64 0, i64 6, [0 x i64] zeroinitializer }, comdat, align 8
|
||||
@"$ct.test.Blob" = linkonce global %.introspect { i8 9, i64 0, ptr null, i64 8, i64 0, i64 2, [0 x i64] zeroinitializer }, comdat, align 8
|
||||
@"$ct.test.Foor" = linkonce global %.introspect { i8 10, i64 0, ptr null, i64 16, i64 0, i64 2, [0 x i64] zeroinitializer }, comdat, align 8
|
||||
@"$ct.test.Foo2" = linkonce global %.introspect { i8 9, i64 0, ptr null, i64 4, i64 0, i64 1, [0 x i64] zeroinitializer }, comdat, align 8
|
||||
@"$ct.test.Foo" = linkonce global %.introspect { i8 9, i64 0, ptr null, i64 8, i64 0, i64 2, [0 x i64] zeroinitializer }, comdat, align 8
|
||||
@"$ct.test.Bobo" = linkonce global %.introspect { i8 10, i64 0, ptr null, i64 20, i64 0, i64 6, [0 x i64] zeroinitializer }, comdat, align 8
|
||||
@"$ct.test.Blob" = linkonce global %.introspect { i8 10, i64 0, ptr null, i64 8, i64 0, i64 2, [0 x i64] zeroinitializer }, comdat, align 8
|
||||
@"$ct.test.Foor" = linkonce global %.introspect { i8 11, i64 0, ptr null, i64 16, i64 0, i64 2, [0 x i64] zeroinitializer }, comdat, align 8
|
||||
@"$ct.test.Foo2" = linkonce global %.introspect { i8 10, i64 0, ptr null, i64 4, i64 0, i64 1, [0 x i64] zeroinitializer }, comdat, align 8
|
||||
@"$ct.test.Foo" = linkonce global %.introspect { i8 10, i64 0, ptr null, i64 8, i64 0, i64 2, [0 x i64] zeroinitializer }, comdat, align 8
|
||||
@.enum.HELO = internal constant [5 x i8] c"HELO\00", align 1
|
||||
@.enum.WORLD = internal constant [6 x i8] c"WORLD\00", align 1
|
||||
@.enum.BYE = internal constant [4 x i8] c"BYE\00", align 1
|
||||
|
||||
@@ -24,7 +24,7 @@ fn void main() {}
|
||||
|
||||
/* #expect: test.ll
|
||||
|
||||
@"$ct.test.Foo" = linkonce global %.introspect { i8 9, i64 0, ptr null, i64 4, i64 0, i64 1, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.test.Foo2" = linkonce global %.introspect { i8 9, i64 0, ptr null, i64 4, i64 0, i64 1, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.test.Foo" = linkonce global %.introspect { i8 10, i64 0, ptr null, i64 4, i64 0, i64 1, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.test.Foo2" = linkonce global %.introspect { i8 10, i64 0, ptr null, i64 4, i64 0, i64 1, [0 x i64] zeroinitializer }, align 8
|
||||
define i32 @test.test() #0 {
|
||||
define i32 @test.test2() #0 {
|
||||
|
||||
@@ -37,8 +37,8 @@ fn int test()
|
||||
%"int[]" = type { ptr, i64 }
|
||||
%"Bar[]" = type { ptr, i64 }
|
||||
|
||||
@"$ct.general_tests.Baz" = linkonce global %.introspect { i8 10, i64 0, ptr null, i64 8, i64 0, i64 2, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.general_tests.Bar" = linkonce global %.introspect { i8 9, i64 0, ptr null, i64 8, i64 0, i64 2, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.general_tests.Baz" = linkonce global %.introspect { i8 11, i64 0, ptr null, i64 8, i64 0, i64 2, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.general_tests.Bar" = linkonce global %.introspect { i8 10, i64 0, ptr null, i64 8, i64 0, i64 2, [0 x i64] zeroinitializer }, align 8
|
||||
@.__const = private unnamed_addr constant { i32, [4 x i8] } { i32 1, [4 x i8] undef }, align 8
|
||||
@test.foo1 = internal unnamed_addr global i32 22, align 4
|
||||
@.str = private unnamed_addr constant [7 x i8] c"Hello!\00", align 1
|
||||
|
||||
@@ -35,8 +35,8 @@ fn int main()
|
||||
%Bar = type { i32, i32 }
|
||||
%"Bar[]" = type { ptr, i64 }
|
||||
|
||||
@"$ct.statics.Baz" = linkonce global %.introspect { i8 10, i64 0, ptr null, i64 8, i64 0, i64 2, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.statics.Bar" = linkonce global %.introspect { i8 9, i64 0, ptr null, i64 8, i64 0, i64 2, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.statics.Baz" = linkonce global %.introspect { i8 11, i64 0, ptr null, i64 8, i64 0, i64 2, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.statics.Bar" = linkonce global %.introspect { i8 10, i64 0, ptr null, i64 8, i64 0, i64 2, [0 x i64] zeroinitializer }, align 8
|
||||
@.__const = private unnamed_addr constant [1 x %Bar] [%Bar { i32 1, i32 2 }], align 4
|
||||
@.__const_slice = private unnamed_addr global [1 x %Bar] [%Bar { i32 1, i32 2 }], align 4
|
||||
@test.c = internal unnamed_addr global %"Bar[]" { ptr @.__const_slice, i64 1 }, align 8
|
||||
|
||||
@@ -50,8 +50,8 @@ fn int main()
|
||||
%"int[]" = type { ptr, i64 }
|
||||
%Baz = type { double }
|
||||
|
||||
@"$ct.subarrays.Baz" = linkonce global %.introspect { i8 10, i64 0, ptr null, i64 8, i64 0, i64 2, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.subarrays.Bar" = linkonce global %.introspect { i8 9, i64 0, ptr null, i64 8, i64 0, i64 2, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.subarrays.Baz" = linkonce global %.introspect { i8 11, i64 0, ptr null, i64 8, i64 0, i64 2, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.subarrays.Bar" = linkonce global %.introspect { i8 10, i64 0, ptr null, i64 8, i64 0, i64 2, [0 x i64] zeroinitializer }, align 8
|
||||
@.__const_slice = private unnamed_addr global [2 x %Bar] [%Bar { i32 3, i32 4 }, %Bar { i32 8, i32 9 }], align 16
|
||||
@subarrays.arrbar = local_unnamed_addr global %"Bar[]" { ptr @.__const_slice, i64 2 }, align 8
|
||||
@.__const_slice.3 = private unnamed_addr global [2 x i32] [i32 1, i32 2], align 4
|
||||
|
||||
@@ -79,7 +79,7 @@ fn void main()
|
||||
|
||||
%Foo = type { i16, i8, i8, i16, i16 }
|
||||
|
||||
@"$ct.userland_bitcast.Foo" = linkonce global %.introspect { i8 9, i64 0, ptr null, i64 8, i64 0, i64 5, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.userland_bitcast.Foo" = linkonce global %.introspect { i8 10, i64 0, ptr null, i64 8, i64 0, i64 5, [0 x i64] zeroinitializer }, align 8
|
||||
@.str = private unnamed_addr constant [16 x i8] c"%f => %d => %f\0A\00", align 1
|
||||
@.str.1 = private unnamed_addr constant [18 x i8] c"%e => %llu => %e\0A\00", align 1
|
||||
|
||||
|
||||
@@ -85,7 +85,7 @@ fn void main()
|
||||
|
||||
%Foo = type { [3 x i32] }
|
||||
|
||||
@"$ct.foo.Foo" = linkonce global %.introspect { i8 9, i64 0, ptr null, i64 12, i64 0, i64 1, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.foo.Foo" = linkonce global %.introspect { i8 10, i64 0, ptr null, i64 12, i64 0, i64 1, [0 x i64] zeroinitializer }, align 8
|
||||
@.str = private unnamed_addr constant [11 x i8] c"getFields\0A\00", align 1
|
||||
@.__const = private unnamed_addr constant [5 x i32] [i32 3, i32 5, i32 2, i32 10, i32 111], align 16
|
||||
@.str.1 = private unnamed_addr constant [11 x i8] c"Call made\0A\00", align 1
|
||||
|
||||
@@ -35,7 +35,7 @@ extern fn int printf(char *fmt, ...);
|
||||
%Foo = type { %"int[]" }
|
||||
%"int[]" = type { ptr, i64 }
|
||||
|
||||
@"$ct.foo.Foo" = linkonce global %.introspect { i8 9, i64 0, ptr null, i64 16, i64 0, i64 1, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.foo.Foo" = linkonce global %.introspect { i8 10, i64 0, ptr null, i64 16, i64 0, i64 1, [0 x i64] zeroinitializer }, align 8
|
||||
@.__const = private unnamed_addr constant [3 x i32] [i32 1, i32 3, i32 10], align 4
|
||||
@.str = private unnamed_addr constant [4 x i8] c"%d\0A\00", align 1
|
||||
|
||||
|
||||
@@ -28,9 +28,9 @@ fn void test_check_nums()
|
||||
Foo f = A;
|
||||
switch (f)
|
||||
{
|
||||
case Foo.from_ordinal(1):
|
||||
case (Foo)1:
|
||||
break;
|
||||
case Foo.from_ordinal(0):
|
||||
case (Foo)0:
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -66,7 +66,7 @@ fn void test_duplicate_case2(Foo i)
|
||||
{
|
||||
case A:
|
||||
break;
|
||||
case Foo.from_ordinal(1):
|
||||
case (Foo)1:
|
||||
break;
|
||||
case A: // #error: same case value appears
|
||||
break;
|
||||
|
||||
@@ -38,12 +38,12 @@ fn void main()
|
||||
%Matrix2x2_b = type { %.anon.1 }
|
||||
%.anon.1 = type { [4 x float] }
|
||||
|
||||
@"$ct.foo.$anon" = linkonce global %.introspect { i8 9, i64 0, ptr null, i64 16, i64 0, i64 4, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.foo.$anon.3" = linkonce global %.introspect { i8 10, i64 0, ptr null, i64 16, i64 0, i64 2, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.foo.Matrix2x2" = linkonce global %.introspect { i8 9, i64 0, ptr null, i64 16, i64 0, i64 1, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.foo.$anon.6" = linkonce global %.introspect { i8 9, i64 0, ptr null, i64 16, i64 0, i64 4, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.foo.$anon.7" = linkonce global %.introspect { i8 10, i64 0, ptr null, i64 16, i64 0, i64 2, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.foo.Matrix2x2_b" = linkonce global %.introspect { i8 9, i64 0, ptr null, i64 16, i64 0, i64 1, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.foo.$anon" = linkonce global %.introspect { i8 10, i64 0, ptr null, i64 16, i64 0, i64 4, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.foo.$anon.3" = linkonce global %.introspect { i8 11, i64 0, ptr null, i64 16, i64 0, i64 2, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.foo.Matrix2x2" = linkonce global %.introspect { i8 10, i64 0, ptr null, i64 16, i64 0, i64 1, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.foo.$anon.6" = linkonce global %.introspect { i8 10, i64 0, ptr null, i64 16, i64 0, i64 4, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.foo.$anon.7" = linkonce global %.introspect { i8 11, i64 0, ptr null, i64 16, i64 0, i64 2, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.foo.Matrix2x2_b" = linkonce global %.introspect { i8 10, i64 0, ptr null, i64 16, i64 0, i64 1, [0 x i64] zeroinitializer }, align 8
|
||||
@.__const = private unnamed_addr constant %Matrix2x2 { %.anon { %.anon.0 { float 1.000000e+00, float 2.000000e+00, float 3.000000e+00, float 4.000000e+00 } } }, align 4
|
||||
@.__const.8 = private unnamed_addr constant %Matrix2x2_b { %.anon.1 { [4 x float] [float 1.000000e+00, float 2.000000e+00, float 3.000000e+00, float 4.000000e+00] } }, align 4
|
||||
@.str = private unnamed_addr constant [13 x i8] c"%f %f %f %f\0A\00", align 1
|
||||
|
||||
@@ -16,7 +16,7 @@ fn Event test(int x)
|
||||
/* #expect: test.ll
|
||||
%Event = type { i32 }
|
||||
|
||||
@"$ct.test.Event" = linkonce global %.introspect { i8 9, i64 0, ptr null, i64 4, i64 0, i64 1, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.test.Event" = linkonce global %.introspect { i8 10, i64 0, ptr null, i64 4, i64 0, i64 1, [0 x i64] zeroinitializer }, align 8
|
||||
@.__const = private unnamed_addr constant %Event { i32 1 }, align 4
|
||||
@.__const.1 = private unnamed_addr constant %Event { i32 2 }, align 4
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@ fn void test1()
|
||||
|
||||
%Point = type { i32, i32 }
|
||||
|
||||
@"$ct.test.Point" = linkonce global %.introspect { i8 9, i64 0, ptr null, i64 8, i64 0, i64 2, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.test.Point" = linkonce global %.introspect { i8 10, i64 0, ptr null, i64 8, i64 0, i64 2, [0 x i64] zeroinitializer }, align 8
|
||||
@.__const = private unnamed_addr constant %Point { i32 5, i32 6 }, align 4
|
||||
|
||||
define void @test.test1() #0 {
|
||||
|
||||
@@ -20,7 +20,7 @@ Foo foo8 @private = FOO7;
|
||||
|
||||
/* #expect: structo.ll
|
||||
|
||||
@"$ct.structo.Foo" = linkonce global %.introspect { i8 9, i64 0, ptr null, i64 16, i64 0, i64 2, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.structo.Foo" = linkonce global %.introspect { i8 10, i64 0, ptr null, i64 16, i64 0, i64 2, [0 x i64] zeroinitializer }, align 8
|
||||
@structo.x = internal unnamed_addr global i64 16, align 8
|
||||
@structo.foo1 = internal unnamed_addr global %Foo { i32 1, i64 2 }, align 8
|
||||
@structo.foo2 = internal unnamed_addr global %Foo { i32 2, i64 0 }, align 8
|
||||
|
||||
@@ -58,7 +58,7 @@ fn void? Lexer.init(&self, InStream reader, Ident ident, Allocator using = mem)
|
||||
{
|
||||
String name = tok.token;
|
||||
assert(name.len > 0 && name.len <= ushort.max);
|
||||
trie.set(name, Token.from_ordinal(i))!;
|
||||
trie.set(name, (Token)i)!;
|
||||
max_token = max(max_token, (ushort)name.len);
|
||||
}
|
||||
foreach (tok : Comment.values)
|
||||
@@ -679,7 +679,7 @@ fn void test()
|
||||
%List = type { i64, i64, %any, ptr }
|
||||
%.anon = type { %"char[]" }
|
||||
|
||||
@"$ct.lexer_test.UintTest" = linkonce global %.introspect { i8 9, i64 0, ptr null, i64 24, i64 0, i64 2, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.lexer_test.UintTest" = linkonce global %.introspect { i8 10, i64 0, ptr null, i64 24, i64 0, i64 2, [0 x i64] zeroinitializer }, align 8
|
||||
@.enum.KEYWORD1 = internal constant [9 x i8] c"KEYWORD1\00", align 1
|
||||
@.enum.KEYWORD2 = internal constant [9 x i8] c"KEYWORD2\00", align 1
|
||||
@.enum.SINGLE = internal constant [7 x i8] c"SINGLE\00", align 1
|
||||
@@ -697,7 +697,7 @@ fn void test()
|
||||
@.str.5 = private unnamed_addr constant [3 x i8] c"*/\00", align 1
|
||||
@"lexer_test.Comment$end" = linkonce constant [2 x %"char[]"] [%"char[]" { ptr @.str.4, i64 1 }, %"char[]" { ptr @.str.5, i64 2 }], align 8
|
||||
@std.core.ascii.ASCII_LOOKUP = extern_weak constant [256 x i16], align 16
|
||||
@"$ct.std.io.ByteReader" = linkonce global %.introspect { i8 9, i64 0, ptr null, i64 24, i64 0, i64 2, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.std.io.ByteReader" = linkonce global %.introspect { i8 10, i64 0, ptr null, i64 24, i64 0, i64 2, [0 x i64] zeroinitializer }, align 8
|
||||
@std.core.mem.allocator.thread_allocator = extern_weak thread_local global %any, align 8
|
||||
|
||||
; Function Attrs:
|
||||
|
||||
@@ -25,8 +25,8 @@ fn void enumInferenceTest()
|
||||
bool y = x1 == x1;
|
||||
Inf2 z = C;
|
||||
if (z == Inf2.A) return;
|
||||
if (z == Inf2.from_ordinal(1)) return;
|
||||
z = Inf2.from_ordinal(2);
|
||||
if (z == (Inf2)1) return;
|
||||
z = (Inf2)2;
|
||||
switch (z)
|
||||
{
|
||||
case Inf2.A:
|
||||
@@ -34,7 +34,7 @@ fn void enumInferenceTest()
|
||||
return;
|
||||
case B:
|
||||
return;
|
||||
case Inf2.from_ordinal(2):
|
||||
case (Inf2)2:
|
||||
x1 += 1;
|
||||
return;
|
||||
default:
|
||||
|
||||
@@ -31,8 +31,8 @@ struct Test
|
||||
%Test = type { %.anon, i32, i32, [0 x i32] }
|
||||
%.anon = type { i32, i32 }
|
||||
|
||||
@"$ct.test.$anon" = linkonce global %.introspect { i8 9, i64 0, ptr null, i64 8, i64 0, i64 2, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.test.Test" = linkonce global %.introspect { i8 9, i64 0, ptr null, i64 16, i64 0, i64 4, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.test.$anon" = linkonce global %.introspect { i8 10, i64 0, ptr null, i64 8, i64 0, i64 2, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.test.Test" = linkonce global %.introspect { i8 10, i64 0, ptr null, i64 16, i64 0, i64 4, [0 x i64] zeroinitializer }, align 8
|
||||
@.enum.ABC = internal constant [4 x i8] c"ABC\00", align 1
|
||||
@.enum.DEF = internal constant [4 x i8] c"DEF\00", align 1
|
||||
@"$ct.int" = linkonce global %.introspect { i8 2, i64 0, ptr null, i64 4, i64 0, i64 0, [0 x i64] zeroinitializer }, align 8
|
||||
|
||||
@@ -63,7 +63,7 @@ enum Foobar : inline char
|
||||
BAZ
|
||||
}
|
||||
|
||||
enum Foobar2 : int (inline char y)
|
||||
enum Foobar2 : const inline int
|
||||
{
|
||||
ABC = 3,
|
||||
DEF = 5,
|
||||
|
||||
@@ -9,7 +9,7 @@ fn void test_with_tz()
|
||||
{
|
||||
FormatTzTestSpec[*] tests = {
|
||||
{ datetime::from_date(1970, Month.JANUARY, 1, 0, 0, 0).with_gmt_offset(0), RFC1123, "Thu, 01 Jan 1970 00:00:00 GMT" },
|
||||
{ datetime::from_date(1994, Month.from_ordinal(10), 6, 8, 49, 37).with_gmt_offset(0), RFC1123, "Sun, 06 Nov 1994 08:49:37 GMT" },
|
||||
{ datetime::from_date(1994, (Month)10, 6, 8, 49, 37).with_gmt_offset(0), RFC1123, "Sun, 06 Nov 1994 08:49:37 GMT" },
|
||||
{ datetime::from_date(2020, Month.JANUARY, 1, 0, 0, 0).with_gmt_offset(0), RFC1123, "Wed, 01 Jan 2020 00:00:00 GMT" },
|
||||
{ datetime::from_date(2020, Month.JANUARY, 1, 0, 0, 0).with_gmt_offset(-3600), RFC1123, "Wed, 01 Jan 2020 01:00:00 GMT" },
|
||||
{ datetime::from_date(2020, Month.JANUARY, 1, 0, 0, 0).with_gmt_offset(-3600), RFC1123Z, "Wed, 01 Jan 2020 00:00:00 -0100" },
|
||||
|
||||
Reference in New Issue
Block a user