As explained in http://gcc.gnu.org/ml/gcc/2011-04/msg00167.html, this patch extends the TYPE_DECL_IS_STUB trick in dwarf2out.c to all types.
Tested on x86_64-suse-linux (GCC + GDB), OK for the mainline? 2011-04-09 Eric Botcazou <ebotca...@adacore.com> * dwarf2out.c (TYPE_DECL_IS_STUB): Extend mechanism to all types. -- Eric Botcazou
Index: dwarf2out.c =================================================================== --- dwarf2out.c (revision 172201) +++ dwarf2out.c (working copy) @@ -6003,19 +6003,19 @@ skeleton_chain_node; #endif /* Define a macro which returns nonzero for a TYPE_DECL which was - implicitly generated for a tagged type. + implicitly generated for a type. - Note that unlike the gcc front end (which generates a NULL named - TYPE_DECL node for each complete tagged type, each array type, and - each function type node created) the g++ front end generates a - _named_ TYPE_DECL node for each tagged type node created. + Note that, unlike the C front-end (which generates a NULL named + TYPE_DECL node for each complete tagged type, each array type, + and each function type node created) the C++ front-end generates + a _named_ TYPE_DECL node for each tagged type node created. These TYPE_DECLs have DECL_ARTIFICIAL set, so we know not to - generate a DW_TAG_typedef DIE for them. */ + generate a DW_TAG_typedef DIE for them. Likewise with the Ada + front-end, but for each type, tagged or not. */ #define TYPE_DECL_IS_STUB(decl) \ (DECL_NAME (decl) == NULL_TREE \ || (DECL_ARTIFICIAL (decl) \ - && is_tagged_type (TREE_TYPE (decl)) \ && ((decl == TYPE_STUB_DECL (TREE_TYPE (decl))) \ /* This is necessary for stub decls that \ appear in nested inline functions. */ \