aboutsummaryrefslogtreecommitdiffstats
path: root/test/regression/expr6.c
diff options
context:
space:
mode:
authorxleroy <xleroy@fca1b0fc-160b-0410-b1d3-a4f43f01ea2e>2011-07-16 16:17:08 +0000
committerxleroy <xleroy@fca1b0fc-160b-0410-b1d3-a4f43f01ea2e>2011-07-16 16:17:08 +0000
commita335e621aaa85a7f73b16c121261dbecf8e68340 (patch)
tree31312a22aafc7f66818c0c82f4c96e88ff391595 /test/regression/expr6.c
parent93b89122000e42ac57abc39734fdf05d3a89e83c (diff)
downloadcompcert-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.c50
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;
+}
+