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