1 /* Test for new block scopes in C99. Inspired by C99 Rationale (N897). */
2 /* Origin: Joseph Myers <jsm28@cam.ac.uk> */
3 /* { dg-do run } */
4 /* { dg-options "-std=iso9899:1999 -pedantic-errors" } */
5
6 struct foo {
7 char a;
8 };
9
10 extern void abort (void);
11 extern void exit (int);
12
13 int
sfoo(void)14 sfoo (void)
15 {
16 if (sizeof (struct foo { int a; double b; char *c; void *d; }))
17 (void) 0;
18 return sizeof (struct foo);
19 }
20
21 int
main(void)22 main (void)
23 {
24 int t, u;
25 t = sfoo ();
26 u = sizeof (struct foo);
27 /* With C90 scoping rules the new declaration of struct foo is in scope
28 above; with C99 it is local to the if.
29 */
30 if (t == u)
31 exit (0); /* C99 rules apply. */
32 else
33 abort (); /* C90 rules apply. */
34 }
35