mirror of
https://github.com/c3lang/c3c.git
synced 2026-02-27 12:01:16 +00:00
146 lines
3.2 KiB
Plaintext
146 lines
3.2 KiB
Plaintext
// #target: macos-x64
|
|
module test;
|
|
faultdef FOO_FAULT;
|
|
macro bool? maybe_throw() => FOO_FAULT~;
|
|
macro int? maybe_throw_int() => FOO_FAULT~;
|
|
|
|
fn void? throwme1()
|
|
{
|
|
if (maybe_throw()!);
|
|
}
|
|
|
|
fn void? throwme2()
|
|
{
|
|
switch (maybe_throw_int()!) { case 0: break; };
|
|
}
|
|
|
|
fn void? throwme3()
|
|
{
|
|
switch { case maybe_throw()!: break; };
|
|
}
|
|
fn void? throwme4()
|
|
{
|
|
while (maybe_throw()!);
|
|
}
|
|
|
|
fn void? throwme5()
|
|
{
|
|
for (maybe_throw()!;;);
|
|
}
|
|
|
|
fn void? throwme6()
|
|
{
|
|
for (;maybe_throw()!, true;);
|
|
}
|
|
|
|
fn void? throwme7()
|
|
{
|
|
for (;;maybe_throw()!);
|
|
}
|
|
|
|
fn int main()
|
|
{
|
|
(void)throwme1();
|
|
(void)throwme2();
|
|
(void)throwme3();
|
|
(void)throwme4();
|
|
(void)throwme5();
|
|
(void)throwme6();
|
|
(void)throwme7();
|
|
return 0;
|
|
}
|
|
|
|
/* #expect: test.ll
|
|
|
|
define i64 @test.throwme1() #0 {
|
|
entry:
|
|
%error_var = alloca i64, align 8
|
|
store i64 ptrtoint (ptr @test.FOO_FAULT to i64), ptr %error_var, align 8
|
|
br label %guard_block
|
|
|
|
guard_block: ; preds = %entry
|
|
%0 = load i64, ptr %error_var, align 8
|
|
ret i64 %0
|
|
}
|
|
|
|
define i64 @test.throwme2() #0 {
|
|
entry:
|
|
%error_var = alloca i64, align 8
|
|
store i64 ptrtoint (ptr @test.FOO_FAULT to i64), ptr %error_var, align 8
|
|
br label %guard_block
|
|
|
|
guard_block: ; preds = %entry
|
|
%0 = load i64, ptr %error_var, align 8
|
|
ret i64 %0
|
|
}
|
|
|
|
define i64 @test.throwme3() #0 {
|
|
entry:
|
|
%switch = alloca i8, align 1
|
|
%error_var = alloca i64, align 8
|
|
store i8 1, ptr %switch, align 1
|
|
br label %switch.entry
|
|
|
|
switch.entry: ; preds = %entry
|
|
%0 = load i8, ptr %switch, align 1
|
|
%1 = trunc i8 %0 to i1
|
|
store i64 ptrtoint (ptr @test.FOO_FAULT to i64), ptr %error_var, align 8
|
|
br label %guard_block
|
|
|
|
guard_block: ; preds = %switch.entry
|
|
%2 = load i64, ptr %error_var, align 8
|
|
ret i64 %2
|
|
}
|
|
|
|
define i64 @test.throwme4() #0 {
|
|
entry:
|
|
%error_var = alloca i64, align 8
|
|
br label %loop.cond
|
|
|
|
loop.cond: ; preds = %entry
|
|
store i64 ptrtoint (ptr @test.FOO_FAULT to i64), ptr %error_var, align 8
|
|
br label %guard_block
|
|
|
|
guard_block: ; preds = %loop.cond
|
|
%0 = load i64, ptr %error_var, align 8
|
|
ret i64 %0
|
|
}
|
|
|
|
define i64 @test.throwme5() #0 {
|
|
entry:
|
|
%error_var = alloca i64, align 8
|
|
store i64 ptrtoint (ptr @test.FOO_FAULT to i64), ptr %error_var, align 8
|
|
br label %guard_block
|
|
|
|
guard_block: ; preds = %entry
|
|
%0 = load i64, ptr %error_var, align 8
|
|
ret i64 %0
|
|
}
|
|
|
|
define i64 @test.throwme6() #0 {
|
|
entry:
|
|
%error_var = alloca i64, align 8
|
|
br label %loop.cond
|
|
|
|
loop.cond: ; preds = %entry
|
|
store i64 ptrtoint (ptr @test.FOO_FAULT to i64), ptr %error_var, align 8
|
|
br label %guard_block
|
|
|
|
guard_block: ; preds = %loop.cond
|
|
%0 = load i64, ptr %error_var, align 8
|
|
ret i64 %0
|
|
}
|
|
|
|
define i64 @test.throwme7() #0 {
|
|
entry:
|
|
%error_var = alloca i64, align 8
|
|
br label %loop.body
|
|
|
|
loop.body: ; preds = %entry
|
|
store i64 ptrtoint (ptr @test.FOO_FAULT to i64), ptr %error_var, align 8
|
|
br label %guard_block
|
|
|
|
guard_block: ; preds = %loop.body
|
|
%0 = load i64, ptr %error_var, align 8
|
|
ret i64 %0
|
|
} |