| # { dg-options "-fstropping=upper" } # |
| # Dereferencing of struct fields. Version with sub-names and |
| explicit assignations instead of initialization in variable declaration. # |
| BEGIN MODE S = STRUCT (INT x, REF INT xx, REF REF INT xxx); |
| |
| INT x := 10; |
| REF INT xx := x; |
| REF REF INT xxx := xx; |
| |
| S s; |
| |
| x OF s := x; |
| xx OF s := xx; |
| xxx OF s := xxx; |
| |
| ASSERT (x OF s = 10); |
| ASSERT (xx OF s = 10); |
| ASSERT (xxx OF s = 10); |
| ASSERT ((x) = 10); |
| ASSERT ((xx) = 10); |
| ASSERT ((xxx) = 10); |
| ASSERT (x OF s + 1 = 11); |
| ASSERT (xx OF s + 1 = 11); |
| ASSERT (xxx OF s + 1 = 11); |
| ASSERT ((x OF s + 1) = 11); |
| ASSERT ((xx OF s + 1) = 11); |
| ASSERT ((xxx OF s + 1) = 11); |
| ASSERT ((x OF s := x) = 10); |
| ASSERT ((xx OF s := xx) = 10); |
| ASSERT ((xxx OF s := xxx) = 10); |
| ASSERT ((x OF s := x) + 1 = 11); |
| ASSERT ((xx OF s := xx) + 1 = 11); |
| ASSERT ((xxx OF s := xxx) + 1 = 11); |
| x := 20; |
| ASSERT (x OF s = 10); |
| ASSERT (xx OF s = 20); |
| ASSERT (xxx OF s = 20); |
| ASSERT ((x) = 20); |
| ASSERT ((xx) = 20); |
| ASSERT ((xxx) = 20); |
| ASSERT (x OF s + 1 = 11); |
| ASSERT (xx OF s + 1 = 21); |
| ASSERT (xxx OF s + 1 = 21); |
| ASSERT ((x OF s + 1) = 11); |
| ASSERT ((xx OF s + 1) = 21); |
| ASSERT ((xxx OF s + 1) = 21); |
| ASSERT ((x OF s := x) = 20); |
| ASSERT ((xx OF s := xx) = 20); |
| ASSERT ((xxx OF s := xxx) = 20); |
| ASSERT ((x OF s := x) + 1 = 21); |
| ASSERT ((xx OF s := xx) + 1 = 21); |
| ASSERT ((xxx OF s := xxx) + 1 = 21) |
| END |