From e072b0c410818178beda7e3da622d7ff29d0c3be Mon Sep 17 00:00:00 2001 From: Alexandre Oliva Date: Sat, 15 Apr 2017 03:28:31 +0000 Subject: [libcp1] handle anon aggregates linkage-named by typedefs Arrange for the first typedef to an anonymous type in the same context to be used as the linkage name for the type. for gcc/cp/ChangeLog * decl.c (name_unnamed_type): Split out of... (grokdeclarator): ... this. * decl.h (name_unnamed_type): Declare. for libcc1/ChangeLog * libcp1plugin.cc (plugin_build_decl): Call name_unnamed_type. From-SVN: r246938 --- libcc1/ChangeLog | 4 ++++ libcc1/libcp1plugin.cc | 9 +++++++++ 2 files changed, 13 insertions(+) (limited to 'libcc1') diff --git a/libcc1/ChangeLog b/libcc1/ChangeLog index 5db05c58ba7..a6b9985e4ab 100644 --- a/libcc1/ChangeLog +++ b/libcc1/ChangeLog @@ -1,3 +1,7 @@ +2017-04-15 Alexandre Oliva + + * libcp1plugin.cc (plugin_build_decl): Call name_unnamed_type. + 2017-01-30 Alexandre Oliva Introduce C++ support. diff --git a/libcc1/libcp1plugin.cc b/libcc1/libcp1plugin.cc index 545f28b9861..2464aa2f39d 100644 --- a/libcc1/libcp1plugin.cc +++ b/libcc1/libcp1plugin.cc @@ -1494,6 +1494,15 @@ plugin_build_decl (cc1_plugin::connection *self, set_access_flags (decl, acc_flags); + /* If this is the typedef that names an otherwise anonymous type, + propagate the typedef name to the type. In normal compilation, + this is done in grokdeclarator. */ + if (sym_kind == GCC_CP_SYMBOL_TYPEDEF + && !template_decl_p + && DECL_CONTEXT (decl) == TYPE_CONTEXT (sym_type) + && TYPE_UNNAMED_P (sym_type)) + name_unnamed_type (sym_type, decl); + if (sym_kind != GCC_CP_SYMBOL_TYPEDEF && sym_kind != GCC_CP_SYMBOL_CLASS && sym_kind != GCC_CP_SYMBOL_UNION -- cgit v1.2.1