On Wed, Mar 21, 2018 at 09:41:11PM +0100, Jakub Jelinek wrote: > I've committed my last patch to unbreak aarch64 and powerpc* bootstrap > in a rush just after watching it passed bootstrap, not waiting for test > results. > Unfortunately, it seems the DECL_INITIAL (decl) = decl; hack wasn't used as > the comment suggested only by dw2_force_const_mem, but also by asan.c. > In that case forcing flag_section_anchors temporarily to 0 is too fragile, > so this patch instead reverts the varasm.c change (just provides a different > comment) and for good measure adds the DECL_INITIAL hack on the dw2 decl > after it is emitted (we still use the temporary flag_section_anchors = 0 > on the assemble_variable, because at that point it really should have better > DECL_INITIAL to choose section right). > > Bootstrapped/regtested on {x86_64,i686,powerpc64,powerpc64le}-linux, > bootstrapped on aarch64-linux (regtest still pending).
And successfully tested also on aarch64-linux. > Ok for trunk? > > 2018-03-21 Jakub Jelinek <ja...@redhat.com> > > PR sanitizer/85018 > * dwarf2asm.c (dw2_output_indirect_constant_1): Set > DECL_INITIAL (decl) to decl at the end. > * varasm.c (use_blocks_for_decl_p): Revert the 2018-03-20 change, > adjust the comment. > > --- gcc/dwarf2asm.c.jj 2018-03-20 14:00:19.863928902 +0100 > +++ gcc/dwarf2asm.c 2018-03-21 11:52:13.523869188 +0100 > @@ -982,6 +982,7 @@ dw2_output_indirect_constant_1 (const ch > flag_section_anchors = save_flag_section_anchors; > flag_sanitize = save_flag_sanitize; > assemble_integer (sym_ref, POINTER_SIZE_UNITS, POINTER_SIZE, 1); > + DECL_INITIAL (decl) = decl; > > return 0; > } > --- gcc/varasm.c.jj 2018-03-20 14:00:20.278928898 +0100 > +++ gcc/varasm.c 2018-03-21 11:51:01.838881084 +0100 > @@ -1253,6 +1253,12 @@ use_blocks_for_decl_p (tree decl) > if (!VAR_P (decl) && TREE_CODE (decl) != CONST_DECL) > return false; > > + /* DECL_INITIAL (decl) set to decl is a hack used for some decls that > + are never used from code directly and we never want object block > handling > + for those. */ > + if (DECL_INITIAL (decl) == decl) > + return false; > + > /* If this decl is an alias, then we don't want to emit a > definition. */ > if (VAR_P (decl) Jakub