if (DECL_LANG_SPECIFIC (d))
copy_lang_decl (d);
+ /* Must set DECL_ABSTRACT_ORIGIN here for local variables, to ensure
+ that we don't get -Wshadow warnings. But don't set it here if
+ pushdecl might return a duplicate decl, as that will result in
+ incorrect DWARF debug info. */
+ if (! DECL_EXTERNAL (d) || ! TREE_PUBLIC (d))
+ /* Prevent warning for shadowing with these. */
+ DECL_ABSTRACT_ORIGIN (d) = t;
+
newd = pushdecl (d);
- /* If the decl we get back is the copy of 't' that we started with,
+ /* If we didn't set DECL_ABSTRACT_ORIGIN above, then set it now.
+ Simpler to just set it always rather than checking.
+ If the decl we get back is the copy of 't' that we started with,
then set the DECL_ABSTRACT_ORIGIN. Otherwise, we must have a
duplicate decl, and we got the older one back. In that case, setting
DECL_ABSTRACT_ORIGIN is not appropriate. */
if (newd == d)
- /* Prevent warning for shadowing with these. */
DECL_ABSTRACT_ORIGIN (d) = t;
}