scc

simple c99 compiler
git clone git://git.simple-cc.org/scc
Log | Files | Refs | Submodules | README | LICENSE

commit cce24fc7a328fce5fcc597e7aebf1433f8cabd91
parent 5b60fbc9f53eb78533c016af7d5871a019b15acc
Author: Roberto E. Vargas Caballero <k0ga@shike2.com>
Date:   Tue, 22 Mar 2022 09:05:47 +0100

tests/cc: Add test 0189-cpp.c

Diffstat:
Atests/cc/execute/0189-cpp.c | 97+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mtests/cc/execute/scc-tests.lst | 1+
2 files changed, 98 insertions(+), 0 deletions(-)

diff --git a/tests/cc/execute/0189-cpp.c b/tests/cc/execute/0189-cpp.c @@ -0,0 +1,97 @@ +/* taken from ISO/IEC 9899:1999 Section 6.10.3.5 p5 */ + +int z[3] = {1, 0, 0}; + +int +f(int x) +{ + return x+1; +} + +int +t(int x) +{ + return x+2; +} + +int +m(int x, int y) +{ + return x+y; +} + +#define x 3 +#define f(a) f(x * (a)) +#undef x + +#define x 2 +#define z z[0] +#define g f +#define h g(~ +#define m(a) a(w) +#define w 0,1 +#define t(a) a +#define p() int +#define q(x) x +#define r(x,y) x ## y +#define str(x) # x + +int +test1() +{ + return f(z) == 3; +} + +int +test2(int y) +{ + return f(y+1) + f(f(z)) % t(t(g)(0) + t)(1) == 10; +} + +int +test3() +{ + return g(x+(3,4)-w) | h 5) & m + (f)^m(m) == 3; +} + +int +test4() +{ + p() i[q()] = { q(1), r(2,3), r(4,), r(,5), r(,) }; + + return i[0] + i[1] + i[2] + i[3] == 33; +} + +int +test5() +{ + int i; + char c[2][6] = { str(hello), str() }; + + for (i = 0; i < 6; i++) { + if (c[0][i] != "hello"[i]) + return 0; + } + + if (c[1][0] != '\0') + return 0; + + return 1; +} + +int +main() +{ + if (!test1()) + return 1; + if (!test2(2)) + return 2; + if (!test3()) + return 3; + if (!test4()) + return 4; + if (!test5()) + return 5; + return 0; +} diff --git a/tests/cc/execute/scc-tests.lst b/tests/cc/execute/scc-tests.lst @@ -179,6 +179,7 @@ 0186-dec-ary.c 0187-zero-struct.c 0188-multi-string.c [TODO] +0189-cpp.c [TODO] 0190-enum-ary.c 0191-ary-addr.c 0192-ptrcmp.c