On Wed, Mar 17, 2010 at 5:32 PM, Jakub Jelinek <ja...@redhat.com> wrote: > On Wed, Mar 17, 2010 at 12:06:49PM -0400, Aldy Hernandez wrote: >> What happens is that rtl_for_decl_location():dwarf2out.c will call >> make_decl_rtl() which further down the call chain will call >> get_alias_set/new_alias_set. It matters not that we reset DECL_RTL >> immediately after, we have already created a new alias set for first >> time callers: >> >> /* Try harder to get a rtl. If this symbol ends up not being emitted >> in the current CU, resolve_addr will remove the expression referencing >> it. */ >> ... >> ... >> { >> rtl = DECL_RTL (decl); >> /* Reset DECL_RTL back, as various parts of the compiler expects >> DECL_RTL set meaning it is actually going to be output. */ >> SET_DECL_RTL (decl, NULL); > > expand_debug_expr is another such spot. > I guess best would be to make sure no new alias set is created in these > places. Perhaps > int save_strict_aliasing = flag_strict_aliasing; > flag_strict_aliasing = 0; > rtl = DECL_RTL (decl); > flag_strict_aliasing = save_strict_aliasing; > in both places? > The rtls created this way are used only for DEBUG purposes. > I bet C/C++ FEs create the alias set for the decls much earlier...
Ugh. I'd rather simply drop alias-sets from compare-debug dumps. But .. rtl = DECL_RTL (decl); /* Reset DECL_RTL back, as various parts of the compiler expects DECL_RTL set meaning it is actually going to be output. */ SET_DECL_RTL (decl, NULL); ... why do this in the first place? Is this an issue for all decls or just for DEBUG_DECLs? For DEBUG_DECLs you could refuse to assign alias-sets in get_alias_set by returning 0 for them. Richard. > Jakub >