/* { dg-do compile } */ /* { dg-options "-Os" } */ /* when compiling for size avoid the following peephole ------------------------------------------------------------- Pattern 1 : r0 = r1 << {i} r3 = r4/INT + r0 ;;and commutative || \/ add{i} r3,r4/INT,r1 ------------------------------------------------------------- */ typedef int a; typedef int b ; struct c { b d; }; struct e { a f; }; int g(int family) { switch (family) case 2: return sizeof(struct e); return 0; } int h(int family) { return 1 + g(family) - 1 ; } extern void m (void); int i(int j) { struct c *hdr; int k; int l; k = h(j); l = sizeof(struct c) + k * 2; hdr->d = l ; if (j) m(); } /* { dg-final { scan-assembler-not "add\d" } } */