1 /* { dg-do compile } */ 2 /* { dg-options "-O1 -fdump-tree-optimized" } */ 3 4 /* Tests for SRA of unions. */ 5 6 void link_error (void); 7 8 typedef union testunion 9 { 10 double d; 11 char f1; 12 } testunion; 13 14 void copyunion1(testunion param)15copyunion1 (testunion param) 16 { 17 testunion local; 18 param.f1 = 0; 19 local = param; 20 if (local.f1 != 0) 21 link_error (); 22 } 23 24 void copyunion11(testunion * param)25copyunion11 (testunion *param) 26 { 27 testunion local; 28 param->f1 = 0; 29 local = *param; 30 if (local.f1 != 0) 31 link_error (); 32 } 33 34 void copyunion111(testunion param)35copyunion111 (testunion param) 36 { 37 testunion *local = ¶m; 38 param.f1 = 0; 39 if (local->f1 != 0) 40 link_error (); 41 } 42 43 testunion globuf; 44 void copyunion1111(void)45copyunion1111 (void) 46 { 47 testunion local; 48 globuf.f1 = 0; 49 local = globuf; 50 if (local.f1 != 0) 51 link_error (); 52 } 53 54 void copyunion11111(void)55copyunion11111 (void) 56 { 57 testunion *local = &globuf; 58 globuf.f1 = 0; 59 if (local->f1 != 0) 60 link_error (); 61 } 62 63 void copyunion111111(testunion param)64copyunion111111 (testunion param) 65 { 66 static testunion local; 67 param.f1 = 0; 68 local = param; 69 if (local.f1 != 0) 70 link_error (); 71 } 72 73 /* There should be no reference to link_error. */ 74 /* { dg-final { scan-tree-dump-times "link_error" 0 "optimized"} } */ 75