summaryrefslogtreecommitdiff
path: root/gcc/testsuite/gcc.c-torture/compile/20020604-1.c
diff options
context:
space:
mode:
authorupstream source tree <ports@midipix.org>2015-03-15 20:14:05 -0400
committerupstream source tree <ports@midipix.org>2015-03-15 20:14:05 -0400
commit554fd8c5195424bdbcabf5de30fdc183aba391bd (patch)
tree976dc5ab7fddf506dadce60ae936f43f58787092 /gcc/testsuite/gcc.c-torture/compile/20020604-1.c
downloadcbb-gcc-4.6.4-554fd8c5195424bdbcabf5de30fdc183aba391bd.tar.bz2
cbb-gcc-4.6.4-554fd8c5195424bdbcabf5de30fdc183aba391bd.tar.xz
obtained gcc-4.6.4.tar.bz2 from upstream website;upstream
verified gcc-4.6.4.tar.bz2.sig; imported gcc-4.6.4 source tree from verified upstream tarball. downloading a git-generated archive based on the 'upstream' tag should provide you with a source tree that is binary identical to the one extracted from the above tarball. if you have obtained the source via the command 'git clone', however, do note that line-endings of files in your working directory might differ from line-endings of the respective files in the upstream repository.
Diffstat (limited to 'gcc/testsuite/gcc.c-torture/compile/20020604-1.c')
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/20020604-1.c93
1 files changed, 93 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.c-torture/compile/20020604-1.c b/gcc/testsuite/gcc.c-torture/compile/20020604-1.c
new file mode 100644
index 000000000..8b958040e
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/20020604-1.c
@@ -0,0 +1,93 @@
+/* { dg-do assemble } */
+/* { dg-xfail-if "The array is too big" { "m6811-*-* m6812-*-*" } { "*" } { "" } } */
+/* { dg-skip-if "The array is too big" { "avr-*-*" "pdp11-*-*" } { "*" } { "" } } */
+/* { dg-xfail-if "The array too big" { "h8300-*-*" } { "-mno-h" "-mn" } { "" } } */
+/* { dg-skip-if "" { m32c-*-* } { } { } } */
+
+/* PR c/6957
+ This testcase ICEd at -O2 on IA-32, because
+ (insn 141 139 142 (set (subreg:SF (reg:QI 72) 0)
+ (plus:SF (reg:SF 73)
+ (reg:SF 76))) 525 {*fop_sf_comm_nosse} (insn_list 134 (nil))
+ (expr_list:REG_DEAD (reg:SF 73) (nil)))
+ couldn't be reloaded. */
+
+void
+foo (unsigned int n, int x, int y, unsigned char *z)
+{
+ int a, b;
+ float c[2048][4];
+
+ switch (x)
+ {
+ case 0x1906:
+ a = b = -1;
+ break;
+ case 0x190A:
+ a = b = -1;
+ break;
+ case 0x8049:
+ a = b = -1;
+ break;
+ case 0x1907:
+ a = 1;
+ b = 2;
+ break;
+ default:
+ return;
+ }
+
+ if (a >= 0)
+ {
+ unsigned char *d = z;
+ unsigned int i;
+ for (i = 0; i < n; i++)
+ {
+ do
+ {
+ union
+ {
+ float r;
+ unsigned int i;
+ }
+ e;
+ e.r = c[i][1];
+ d[a] =
+ ((e.i >= 0x3f7f0000) ? ((int) e.i <
+ 0) ? (unsigned char) 0
+ : (unsigned char) 255 : (e.r =
+ e.r * (255.0F / 256.0F) +
+ 32768.0F, (unsigned char) e.i));
+ }
+ while (0);
+ d += y;
+ }
+ }
+
+ if (b >= 0)
+ {
+ unsigned char *d = z;
+ unsigned int i;
+ for (i = 0; i < n; i++)
+ {
+ do
+ {
+ union
+ {
+ float r;
+ unsigned int i;
+ }
+ e;
+ e.r = c[i][2];
+ d[b] =
+ ((e.i >= 0x3f7f0000) ? ((int) e.i <
+ 0) ? (unsigned char) 0
+ : (unsigned char) 255 : (e.r =
+ e.r * (255.0F / 256.0F) +
+ 32768.0F, (unsigned char) e.i));
+ }
+ while (0);
+ d += y;
+ }
+ }
+}