From 7c2089414f2d6476c093a08bb7305e72a89b552c Mon Sep 17 00:00:00 2001 From: Andrew Chambers Date: Wed, 27 Feb 2019 20:42:23 +1300 Subject: Implement __typeof__. --- tests/typeof.c | 20 ++++++++++++++++++++ tests/typeof.qbe | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 74 insertions(+) create mode 100644 tests/typeof.c create mode 100644 tests/typeof.qbe (limited to 'tests') diff --git a/tests/typeof.c b/tests/typeof.c new file mode 100644 index 0000000..d6a218f --- /dev/null +++ b/tests/typeof.c @@ -0,0 +1,20 @@ +int v; +typedef int* t; +int f() {v = 1; return 0;} +int main() { + __typeof__(f()) x = 123; + __typeof__(t) y = &x; + + if (x != 123) + return 1; + if (*y != 123) + return 2; + if (sizeof(y) != sizeof(int*)) + return 3; + if (sizeof(x) != sizeof(int)) + return 4; + if (v != 0) + return 5; + + return 0; +} diff --git a/tests/typeof.qbe b/tests/typeof.qbe new file mode 100644 index 0000000..5cd138f --- /dev/null +++ b/tests/typeof.qbe @@ -0,0 +1,54 @@ +export +function w $f() { +@start.1 +@body.2 + storew 1, $v + ret 0 +} +export +function w $main() { +@start.3 + %.1 =l alloc4 4 + %.3 =l alloc8 8 +@body.4 + %.2 =l add %.1, 0 + storew 123, %.2 + %.4 =l add %.3, 0 + storel %.1, %.4 + %.5 =w loadsw %.1 + %.6 =w cnew %.5, 123 + %.7 =w cnew %.6, 0 + jnz %.7, @if_true.5, @if_false.6 +@if_true.5 + ret 1 +@if_false.6 + %.8 =l loadl %.3 + %.9 =w loadsw %.8 + %.10 =w cnew %.9, 123 + %.11 =w cnew %.10, 0 + jnz %.11, @if_true.7, @if_false.8 +@if_true.7 + ret 2 +@if_false.8 + %.12 =w cnel 8, 8 + %.13 =w cnew %.12, 0 + jnz %.13, @if_true.9, @if_false.10 +@if_true.9 + ret 3 +@if_false.10 + %.14 =w cnel 4, 4 + %.15 =w cnew %.14, 0 + jnz %.15, @if_true.11, @if_false.12 +@if_true.11 + ret 4 +@if_false.12 + %.16 =w loadsw $v + %.17 =w cnew %.16, 0 + %.18 =w cnew %.17, 0 + jnz %.18, @if_true.13, @if_false.14 +@if_true.13 + ret 5 +@if_false.14 + ret 0 +} +export data $v = align 4 { z 4 } -- cgit v1.2.3