diff options
author | xleroy <xleroy@fca1b0fc-160b-0410-b1d3-a4f43f01ea2e> | 2011-07-16 16:17:08 +0000 |
---|---|---|
committer | xleroy <xleroy@fca1b0fc-160b-0410-b1d3-a4f43f01ea2e> | 2011-07-16 16:17:08 +0000 |
commit | a335e621aaa85a7f73b16c121261dbecf8e68340 (patch) | |
tree | 31312a22aafc7f66818c0c82f4c96e88ff391595 /test/regression/expr6.c | |
parent | 93b89122000e42ac57abc39734fdf05d3a89e83c (diff) | |
download | compcert-a335e621aaa85a7f73b16c121261dbecf8e68340.tar.gz compcert-a335e621aaa85a7f73b16c121261dbecf8e68340.zip |
In conditional expressions e1 ? e2 : e3, cast the results of e2 and e3 to the type of the whole conditional expression.
Replaced predicates "cast", "is_true" and "is_false" by functions "sem_cast" and "bool_val".
git-svn-id: https://yquem.inria.fr/compcert/svn/compcert/trunk@1684 fca1b0fc-160b-0410-b1d3-a4f43f01ea2e
Diffstat (limited to 'test/regression/expr6.c')
-rw-r--r-- | test/regression/expr6.c | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/test/regression/expr6.c b/test/regression/expr6.c new file mode 100644 index 00000000..4b789a92 --- /dev/null +++ b/test/regression/expr6.c @@ -0,0 +1,50 @@ +/* Conditional expressions */ + +#include <stdio.h> + +int f(int x) +{ + return x >= 0 ? x : -x; +} + +double g(int x, int y, double z) +{ + return x ? y : z; +} + +void h(int x, int y) +{ + while (1) { + if (x && y) break; + printf("false\n"); + return; + } + printf("true\n"); +} + +void k(int x, int y, double z) +{ + while (1) { + if (x ? y : z) break; + printf("false\n"); + return; + } + printf("true\n"); +} + +int main() +{ + printf("f(42) = %d\n", f(42)); + printf("f(-1) = %d\n", f(-1)); + printf("g(1,2,3.14) = %.2f\n", g(1,2,3.14)); + printf("g(0,2,3.14) = %.2f\n", g(0,2,3.14)); + printf("h(1,2) = "); h(1,2); + printf("h(0,2) = "); h(0,2); + printf("h(1,0) = "); h(1,0); + printf("k(1,2,3.14) = "); k(1,2,3.14); + printf("k(0,2,3.14) = "); k(0,2,3.14); + printf("k(1,0,3.14) = "); k(1,0,3.14); + printf("k(0,2,0.00) = "); k(0,2,0.00); + return 0; +} + |