| /* PR target/30665: bug in cris.md peephole2 condition. |
| Original reduced testcase (fails on 3.2.1 derivate, not on trunk). */ |
| /* { dg-do run } */ |
| |
| extern void abort (void); |
| extern void exit (int); |
| |
| struct t |
| { |
| unsigned int a : 12; |
| unsigned int b : 12; |
| unsigned int dummy1 : 8; |
| }; |
| |
| struct area |
| { |
| int xa; |
| int xb; |
| }; |
| |
| struct c |
| { |
| struct area ii; |
| }; |
| |
| static struct c c; |
| |
| void __attribute__ ((__noinline__)) g(int a) |
| { |
| if (a != 79) |
| abort (); |
| } |
| |
| void __attribute__ ((__noinline__)) h(struct t tt) |
| { |
| if (tt.a != 20 || tt.b != 79) |
| abort (); |
| } |
| |
| void __attribute__ ((__noinline__)) s(void); |
| |
| int main(int argc, char **argv) |
| { |
| c.ii.xa = 20; |
| c.ii.xb = 79; |
| |
| s(); |
| |
| exit (0); |
| } |
| |
| void __attribute__ ((__noinline__)) s(void) |
| { |
| struct t ii_x = { .a = c.ii.xa, .b = c.ii.xb }; |
| g(c.ii.xb); |
| h(ii_x); |
| } |