aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.9/gcc/testsuite/gcc.c-torture/execute/20020423-1.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc-4.9/gcc/testsuite/gcc.c-torture/execute/20020423-1.c')
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.c-torture/execute/20020423-1.c33
1 files changed, 33 insertions, 0 deletions
diff --git a/gcc-4.9/gcc/testsuite/gcc.c-torture/execute/20020423-1.c b/gcc-4.9/gcc/testsuite/gcc.c-torture/execute/20020423-1.c
new file mode 100644
index 000000000..5f744b6f9
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.c-torture/execute/20020423-1.c
@@ -0,0 +1,33 @@
+/* PR c/5430 */
+/* Verify that the multiplicative folding code is not fooled
+ by the mix between signed variables and unsigned constants. */
+
+extern void abort (void);
+extern void exit (int);
+
+int main (void)
+{
+ int my_int = 924;
+ unsigned int result;
+
+ result = ((my_int*2 + 4) - 8U) / 2;
+ if (result != 922U)
+ abort();
+
+ result = ((my_int*2 - 4U) + 2) / 2;
+ if (result != 923U)
+ abort();
+
+ result = (((my_int + 2) * 2) - 8U - 4) / 2;
+ if (result != 920U)
+ abort();
+ result = (((my_int + 2) * 2) - (8U + 4)) / 2;
+ if (result != 920U)
+ abort();
+
+ result = ((my_int*4 + 2U) - 4U) / 2;
+ if (result != 1847U)
+ abort();
+
+ exit(0);
+}