From 10064fb94ae91636c96d26eee6d93e7e9d9bd283 Mon Sep 17 00:00:00 2001 From: jsm28 Date: Sun, 9 May 2010 20:39:39 +0000 Subject: PR c/10676 * c-typeck.c (lookup_field): Take a type directly. Update recursive calls. (build_component_ref): Update call to lookup_field. (set_init_label): Use lookup_field to find initialized field. Handle returned list of fields like a sequence of designators. testsuite: * gcc.dg/anon-struct-10.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@159206 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/testsuite/gcc.dg/anon-struct-10.c | 57 +++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 gcc/testsuite/gcc.dg/anon-struct-10.c (limited to 'gcc/testsuite/gcc.dg/anon-struct-10.c') diff --git a/gcc/testsuite/gcc.dg/anon-struct-10.c b/gcc/testsuite/gcc.dg/anon-struct-10.c new file mode 100644 index 00000000000..e212317ea3f --- /dev/null +++ b/gcc/testsuite/gcc.dg/anon-struct-10.c @@ -0,0 +1,57 @@ +/* Test for designated initializers for anonymous structures and + unions. PR 10676. */ +/* { dg-do run } */ +/* { dg-options "" } */ + +extern void abort (void); +extern void exit (int); + +struct s +{ + int a; + struct + { + int b; + int c; + }; + union + { + int d; + struct + { + int e; + }; + }; + struct + { + struct + { + struct + { + int f; + }; + }; + }; +}; + +struct s x = + { + .e = 5, + .b = 4, + .a = 3, + .f = 7, + .c = 9 + }; + +int +main (void) +{ + if (x.a != 3 + || x.b != 4 + || x.c != 9 + || x.d != 5 + || x.e != 5 + || x.f != 7) + abort (); + exit (0); +} -- cgit v1.2.1