diff options
author | upstream source tree <ports@midipix.org> | 2015-03-15 20:14:05 -0400 |
---|---|---|
committer | upstream source tree <ports@midipix.org> | 2015-03-15 20:14:05 -0400 |
commit | 554fd8c5195424bdbcabf5de30fdc183aba391bd (patch) | |
tree | 976dc5ab7fddf506dadce60ae936f43f58787092 /gcc/testsuite/gcc.c-torture/compile/20011130-2.c | |
download | cbb-gcc-4.6.4-upstream.tar.bz2 cbb-gcc-4.6.4-upstream.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/20011130-2.c')
-rw-r--r-- | gcc/testsuite/gcc.c-torture/compile/20011130-2.c | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.c-torture/compile/20011130-2.c b/gcc/testsuite/gcc.c-torture/compile/20011130-2.c new file mode 100644 index 000000000..e3cb5f46a --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/20011130-2.c @@ -0,0 +1,54 @@ +/* This testcase caused infinite loop in life info computation + after if conversion on IA-64. Conditional register dead for + pseudo holding sign-extended k was improperly computed, + resulting in this pseudo being live at start of bb if it was + dead at the end and vice versa; as it was a bb which had edge + to itself, this resulted in alternative propagating this basic + block forever. */ + +typedef struct { + unsigned char a; + unsigned char b; +} S0; + +typedef struct { + S0 *c; + int d; + unsigned int e; + unsigned char *f[3]; + void *g; +} S1; + +int bar (int, void *); + +int foo (S1 *x, float y) +{ + S0 *h; + int i, j, k, l, m; + float n, o, p; + unsigned char *q, *r[3]; + + h = x->c; + m = h->a; + l = h->b; + n = y; + o = 0.0; + if (x->d == 8) + for (j = 0; j < x->e; j++) + for (k = 0; k < 3; k++) + { + n = y; + o = 0.0; + if (m) + q = x->f[k] + x->e - 1 - j; + else + q = x->f[k] + j; + p = (*q - o) * y / (n - o); + p = 0.0 > p ? 0.0 : p; + p = y < p ? y : p; + if (l) + p = r[k][(int) p]; + bar (p, x->g); + } + return 1; +} |