summaryrefslogtreecommitdiff
path: root/gcc/testsuite/gcc.c-torture/execute/shiftopt-1.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/testsuite/gcc.c-torture/execute/shiftopt-1.c')
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/shiftopt-1.c67
1 files changed, 67 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.c-torture/execute/shiftopt-1.c b/gcc/testsuite/gcc.c-torture/execute/shiftopt-1.c
new file mode 100644
index 000000000..8c855b888
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/shiftopt-1.c
@@ -0,0 +1,67 @@
+/* Copyright (C) 2002 Free Software Foundation
+
+ Check that constant folding of shift operations is working.
+
+ Roger Sayle, 10th October 2002. */
+
+extern void abort (void);
+extern void link_error (void);
+
+void
+utest (unsigned int x)
+{
+ if (x >> 0 != x)
+ link_error ();
+
+ if (x << 0 != x)
+ link_error ();
+
+ if (0 << x != 0)
+ link_error ();
+
+ if (0 >> x != 0)
+ link_error ();
+
+ if (-1 >> x != -1)
+ link_error ();
+
+ if (~0 >> x != ~0)
+ link_error ();
+}
+
+void
+stest (int x)
+{
+ if (x >> 0 != x)
+ link_error ();
+
+ if (x << 0 != x)
+ link_error ();
+
+ if (0 << x != 0)
+ link_error ();
+
+ if (0 >> x != 0)
+ link_error ();
+}
+
+int
+main ()
+{
+ utest(9);
+ utest(0);
+
+ stest(9);
+ stest(0);
+
+ return 0;
+}
+
+#ifndef __OPTIMIZE__
+void
+link_error ()
+{
+ abort ();
+}
+#endif
+