+2017-01-09 Richard Biener <rguenther@suse.de>
+
+ PR debug/79000
+ * dwarf2out.c (is_cxx): New overload with context.
+ (is_naming_typedef_decl): Use it.
+
2017-01-08 Sandra Loosemore <sandra@codesourcery.com>
* invoke.texi (Option Summary): Correct spacing in option lists
static unsigned get_AT_unsigned (dw_die_ref, enum dwarf_attribute);
static inline dw_die_ref get_AT_ref (dw_die_ref, enum dwarf_attribute);
static bool is_cxx (void);
+static bool is_cxx (const_tree);
static bool is_fortran (void);
static bool is_ada (void);
static bool remove_AT (dw_die_ref, enum dwarf_attribute);
|| lang == DW_LANG_C_plus_plus_11 || lang == DW_LANG_C_plus_plus_14);
}
+/* Return TRUE if DECL was created by the C++ frontend. */
+
+static bool
+is_cxx (const_tree decl)
+{
+ if (in_lto_p)
+ {
+ const_tree context = decl;
+ while (context && TREE_CODE (context) != TRANSLATION_UNIT_DECL)
+ {
+ if (TREE_CODE (context) == BLOCK)
+ context = BLOCK_SUPERCONTEXT (context);
+ else
+ context = get_containing_scope (context);
+ }
+ if (context && TRANSLATION_UNIT_LANGUAGE (context))
+ return strncmp (TRANSLATION_UNIT_LANGUAGE (context), "GNU C++", 7) == 0;
+ }
+ return is_cxx ();
+}
+
/* Return TRUE if the language is Java. */
static inline bool
/* It looks like Ada produces TYPE_DECLs that are very similar
to C++ naming typedefs but that have different
semantics. Let's be specific to c++ for now. */
- || !is_cxx ())
+ || !is_cxx (decl))
return FALSE;
return (DECL_ORIGINAL_TYPE (decl) == NULL_TREE