Viewing file: sra-13.c (1.42 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
/* Test that SRA replacement can deal with assignments that have sub-replacements on one side and a single scalar replacement on another. */ /* { dg-do run } */ /* { dg-options "-O1" } */
struct A { int i1, i2; };
struct B { long long int l; };
union U { struct A a; struct B b; };
int b, gi; long gl; union U gu1, gu2;
int __attribute__ ((noinline, noclone)) foo (void) { union U x, y; int r;
y = gu1; if (b) y.b.l = gl;
x = y;
if (!b) r = x.a.i1; else r = 0;
gu2 = x; return r; }
long long int __attribute__ ((noinline, noclone)) bar (void) { union U x, y; int r;
y = gu1; if (b) y.a.i1 = gi;
x = y;
if (!b) r = x.b.l; else r = 0;
gu2 = x; return r; }
int main (void) { int r; long long int s;
b = 0; gu1.a.i1 = 123; gu1.a.i2 = 234; r = foo (); if (r != 123) __builtin_abort (); if (gu2.a.i1 != 123) __builtin_abort (); if (gu2.a.i2 != 234) __builtin_abort ();
b = 1; gl = 10000001; gu1.b.l = 10000000; r = foo (); if (r != 0) __builtin_abort (); if (gu2.b.l != 10000001) __builtin_abort ();
b = 0; gu1.b.l = 20000000; s = bar (); if (s != (int)20000000) __builtin_abort (); if (gu2.b.l != 20000000) __builtin_abort ();
b = 1; gi = 456; gu1.a.i1 = 123; gu1.a.i2 = 234; s = bar (); if (s != 0) __builtin_abort (); if (gu2.a.i1 != 456) __builtin_abort ();
return 0; }
|