Commit 25a57fac by Jakub Jelinek Committed by Alan Lawrence

Fix eipa_src AAPCS issue (PR target/65956)

2015-05-05  Jakub Jelinek  <jakub@redhat.com>

	PR target/65956
	* gcc.c-torture/execute/pr65956.c: New test.

From-SVN: r225466
parent 6a478470
2015-05-05 Jakub Jelinek <jakub@redhat.com>
PR target/65956
* gcc.c-torture/execute/pr65956.c: New test.
2015-07-06 Alan Lawrence <alan.lawrence@arm.com> 2015-07-06 Alan Lawrence <alan.lawrence@arm.com>
* gcc.target/arm/aapcs/align1.c: New. * gcc.target/arm/aapcs/align1.c: New.
......
/* PR target/65956 */
struct A { char *a; int b; long long c; };
char v[3];
__attribute__((noinline, noclone)) void
fn1 (char *x, char *y)
{
if (x != &v[1] || y != &v[2])
__builtin_abort ();
v[1]++;
}
__attribute__((noinline, noclone)) int
fn2 (char *x)
{
asm volatile ("" : "+g" (x) : : "memory");
return x == &v[0];
}
__attribute__((noinline, noclone)) void
fn3 (const char *x)
{
if (x[0] != 0)
__builtin_abort ();
}
static struct A
foo (const char *x, struct A y, struct A z)
{
struct A r = { 0, 0, 0 };
if (y.b && z.b)
{
if (fn2 (y.a) && fn2 (z.a))
switch (x[0])
{
case '|':
break;
default:
fn3 (x);
}
fn1 (y.a, z.a);
}
return r;
}
__attribute__((noinline, noclone)) int
bar (int x, struct A *y)
{
switch (x)
{
case 219:
foo ("+", y[-2], y[0]);
case 220:
foo ("-", y[-2], y[0]);
}
}
int
main ()
{
struct A a[3] = { { &v[1], 1, 1LL }, { &v[0], 0, 0LL }, { &v[2], 2, 2LL } };
bar (220, a + 2);
if (v[1] != 1)
__builtin_abort ();
return 0;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment