http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50494



--- Comment #30 from Eric Botcazou <ebotcazou at gcc dot gnu.org> 2013-03-05 
14:39:00 UTC ---

> So we can revert the part of the patch that ends up not creating

> a new decl but only transfer DECL_ALIGN.  But then we still don't

> "merge" the decls we use to refer to the constants, so I wonder

> how creating less decls can fix this issue at all ...



That would be worse, DECL_ALIGN should _not_ be fiddled with for constant pool

entries in the first place since the constant/DECL_INITIAL is shared.



> Note that merging constants but not decls also can end up

> creating bogusly aligned constants.  In fact it seems to me

> that we need to arrange for the LTO path

> 

>   /* If this variable belongs to the global constant pool, retrieve the

>      pre-computed RTL or recompute it in LTO mode.  */

>   if (TREE_CODE (decl) == VAR_DECL && DECL_IN_CONSTANT_POOL (decl))

>     {

>       SET_DECL_RTL (decl, output_constant_def_1 (DECL_INITIAL (decl),

>                                                  decl, 1));

>       return;

>     }

> 

> to never share a constant pool entry ... :/



We should simply not touch DECL_IN_CONSTANT_POOL variables, since they are not

regular VAR_DECLs but only represent the underlying constant.

Reply via email to