diff options
Diffstat (limited to 'test')
-rw-r--r-- | test/func-noreturn.c | 13 | ||||
-rw-r--r-- | test/func-noreturn.qbe | 28 |
2 files changed, 41 insertions, 0 deletions
diff --git a/test/func-noreturn.c b/test/func-noreturn.c new file mode 100644 index 0000000..0cd7f7a --- /dev/null +++ b/test/func-noreturn.c @@ -0,0 +1,13 @@ +_Noreturn void exit(int); +int puts(const char *); +void _Noreturn f(void) { + static int c; + while (c) + puts("loop"); +} +int main(void) { + exit(0); + (*f)(); + (***f)(); + return 1; +} diff --git a/test/func-noreturn.qbe b/test/func-noreturn.qbe new file mode 100644 index 0000000..d1771dc --- /dev/null +++ b/test/func-noreturn.qbe @@ -0,0 +1,28 @@ +data $.Lc.2 = align 4 { z 4 } +data $.Lstring.3 = align 1 { b "loop\000", } +export +function $f() { +@start.1 +@body.2 +@while_cond.3 + %.1 =w loadw $.Lc.2 + jnz %.1, @while_body.4, @while_join.5 +@while_body.4 + %.2 =w call $puts(l $.Lstring.3) + jmp @while_cond.3 +@while_join.5 + hlt +} +export +function w $main() { +@start.6 +@body.7 + call $exit(w 0) + hlt +@dead.8 + call $f() + hlt +@dead.9 + call $f() + hlt +} |