Hi, dwarf2out.c has this trick:
/* Define a macro which returns nonzero for a TYPE_DECL which was implicitly generated for a tagged 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. These TYPE_DECLs have DECL_ARTIFICIAL set, so we know not to generate a DW_TAG_typedef DIE for them. */ #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. */ \ || (DECL_ABSTRACT_ORIGIN (decl) != NULL_TREE \ && (decl_ultimate_origin (decl) \ == TYPE_STUB_DECL (TREE_TYPE (decl))))))) The Ada compiler behaves like the C++ compiler: it creates a named TYPE_DECL and sets DECL_ARTIFICIAL when there is no declaration in the source code. The difference is that there are no "tagged" types in Ada, at least in the C sense; (essentially) all types are equal. So we would need to extend the trick to all types in Ada, i.e. remove the is_tagged_type condition. Would that work for other languages as well, in particular C++? -- Eric Botcazou