aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2005-01-26 00:11:29 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2005-01-26 00:11:29 +0100
commitef8614d733ee5496b834d5f483cc49907fdba2ba (patch)
treee64e05539714be9ab7ccc161ba70315129a12e24 /gcc
parentb8e48b9803cfc1ea11dda0879c2e068c4dfbe61f (diff)
downloadgcc-ef8614d733ee5496b834d5f483cc49907fdba2ba.zip
gcc-ef8614d733ee5496b834d5f483cc49907fdba2ba.tar.gz
gcc-ef8614d733ee5496b834d5f483cc49907fdba2ba.tar.bz2
* g++.dg/opt/range-test-2.C: New test.
From-SVN: r94235
Diffstat (limited to 'gcc')
-rw-r--r--gcc/testsuite/ChangeLog2
-rw-r--r--gcc/testsuite/g++.dg/opt/range-test-2.C96
2 files changed, 98 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 2f7606a..63f4aca 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,7 @@
2005-01-26 Jakub Jelinek <jakub@redhat.com>
+ * g++.dg/opt/range-test-2.C: New test.
+
PR rtl-optimization/19579
* gcc.c-torture/execute/20050124-1.c: New test.
diff --git a/gcc/testsuite/g++.dg/opt/range-test-2.C b/gcc/testsuite/g++.dg/opt/range-test-2.C
new file mode 100644
index 0000000..05690bf
--- /dev/null
+++ b/gcc/testsuite/g++.dg/opt/range-test-2.C
@@ -0,0 +1,96 @@
+// Test fold-const.c (fold_range_test) optimizations.
+// { dg-do run } */
+// { dg-options "-O2" } */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <limits.h>
+
+#if (INT_MAX == 2147483647) && (INT_MIN == -2147483648) \
+ && (SCHAR_MIN == -128) && (SCHAR_MAX == 127) \
+ && (UCHAR_MIN == 0) && (UCHAR_MAX == 255)
+
+#ifndef T
+
+enum enum3
+{
+ enum3_zero,
+ enum3_one,
+ enum3_two,
+ enum3_three,
+ enum3_four,
+ enum3_five,
+ enum3_six,
+ enum3_seven
+};
+
+int var;
+void
+check ()
+{
+ ++var;
+}
+
+#define T(IDX, TYPE, TEST, YESARR, NOARR) \
+void __attribute__((noinline)) \
+test##IDX (TYPE x) \
+{ \
+ if (TEST) \
+ check (); \
+}
+#include "range-test-2.C"
+#undef T
+
+int
+main ()
+{
+ int i, fails = 0;
+
+#define C ,
+#define T(IDX, TYPE, TEST, YESARR, NOARR) \
+ { \
+ static TYPE yesarr##IDX [] = YESARR; \
+ static TYPE noarr##IDX [] = NOARR; \
+ for (i = 0; i < (int) (sizeof (yesarr##IDX) / sizeof (TYPE)); ++i) \
+ { \
+ var = 0; \
+ test##IDX (yesarr##IDX [i]); \
+ if (var != 1) \
+ printf ("test" #IDX " failed for yesarr [%u]\n", i), ++fails; \
+ } \
+ var = 0; \
+ for (i = 0; i < (int) (sizeof (noarr##IDX) / sizeof (TYPE)); ++i) \
+ { \
+ test##IDX (noarr##IDX [i]); \
+ if (var != 0) \
+ printf ("test" #IDX " failed for noarr [%u]\n", i), ++fails; \
+ } \
+ }
+#include "range-test-2.C"
+#undef T
+
+ if (fails)
+ abort ();
+
+ exit (0);
+}
+
+#else
+
+/* Use `C' instead of `,' below to separate array entries. */
+
+T(26, enum3, x == enum3_one || x == enum3_two || x == enum3_three,
+ { enum3_one C enum3_two C enum3_three }, { enum3_zero C enum3_four
+ C enum3_five C enum3_six C enum3_seven })
+
+#endif
+
+#else
+
+int
+main (void)
+{
+ return 0;
+}
+
+#endif