From b7505e07e508dd4724256383e43a26c317cb6616 Mon Sep 17 00:00:00 2001 From: "Pedro F. Giffuni" Date: Fri, 20 May 2016 14:36:49 +0000 Subject: [PATCH] GCC: Add support for named initializers for anonymous structs/unions. This is a C11 feature that is starting to get used in places such as Mesa. This implementation takes a different approach to upstream and is therefore not covered by GPLv3. Obtained from: OpenBSD (CVS rev. 1.2) MFC after: 3 weeks --- contrib/gcc/c-typeck.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/contrib/gcc/c-typeck.c b/contrib/gcc/c-typeck.c index 0101176c0bf7..0e2e907e92d8 100644 --- a/contrib/gcc/c-typeck.c +++ b/contrib/gcc/c-typeck.c @@ -6041,6 +6041,7 @@ set_init_index (tree first, tree last) void set_init_label (tree fieldname) { + tree anon = NULL_TREE; tree tail; if (set_designator (0)) @@ -6058,6 +6059,15 @@ set_init_label (tree fieldname) for (tail = TYPE_FIELDS (constructor_type); tail; tail = TREE_CHAIN (tail)) { + if (DECL_NAME (tail) == NULL_TREE + && (TREE_CODE (TREE_TYPE (tail)) == RECORD_TYPE + || TREE_CODE (TREE_TYPE (tail)) == UNION_TYPE)) + { + anon = lookup_field (tail, fieldname); + if (anon) + break; + } + if (DECL_NAME (tail) == fieldname) break; }