diff options
author | jsm28 <jsm28@138bc75d-0d04-0410-961f-82ee72b054a4> | 2010-05-09 20:39:39 +0000 |
---|---|---|
committer | jsm28 <jsm28@138bc75d-0d04-0410-961f-82ee72b054a4> | 2010-05-09 20:39:39 +0000 |
commit | 10064fb94ae91636c96d26eee6d93e7e9d9bd283 (patch) | |
tree | e7b85702c307070dfea9f600d40c327566bda8aa /gcc/testsuite/gcc.dg/anon-struct-10.c | |
parent | 3760428fe7d598ecb20f6439eb0da84fbcea3830 (diff) | |
download | gcc-10064fb94ae91636c96d26eee6d93e7e9d9bd283.tar.gz |
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
Diffstat (limited to 'gcc/testsuite/gcc.dg/anon-struct-10.c')
-rw-r--r-- | gcc/testsuite/gcc.dg/anon-struct-10.c | 57 |
1 files changed, 57 insertions, 0 deletions
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); +} |