https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65090

Eric Botcazou <ebotcazou at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2015-02-24
                 CC|                            |ebotcazou at gcc dot gnu.org
          Component|middle-end                  |c++
     Ever confirmed|0                           |1

--- Comment #4 from Eric Botcazou <ebotcazou at gcc dot gnu.org> ---
4.9.x also works, but this nevertheless looks like a latent C++ bug to me:

  <<< Unknown tree: nullptr_type >>> D.29238;

  D.29238 = 0;

yields with mainline:

(insn 10 9 11 2 (set (mem/c:SI (plus:SI (reg/f:SI 104 virtual-stack-vars)
                (const_int -4 [0xfffffffffffffffc])) [0 D.29314+0 S4 A32])
        (const_int 0 [0])) t.cc:10 -1
     (nil))

But 32-bit alignment is forced by expand_one_stack_var_at, before it's 8-bit:

 <var_decl 0x7ffff583e870 D.29314
    type <nullptr_type 0x7ffff6e1bd20 decltype(nullptr) public unsigned type_6
SI
        size <integer_cst 0x7ffff6d0af00 constant 32>
        unit size <integer_cst 0x7ffff6d0af18 constant 4>
        align 8 symtab 0 alias set -1 canonical type 0x7ffff6e1bd20
        pointer_to_this <pointer_type 0x7ffff5f677e0> reference_to_this
<reference_type 0x7ffff5f675e8>>
    addressable used unsigned ignored SI file t.cc line 10 col 30 size
<integer_cst 0x7ffff6d0af00 32> unit size <integer_cst 0x7ffff6d0af18 4>
    align 8 context <function_decl 0x7ffff5f57870 __comp_ctor > abstract_origin
<var_decl 0x7ffff5f68090 D.25687>>

In other words giving SImode to NULLPTR_TYPE with only 8-bit alignment is a bit
dubious on strict-alignment platforms like SPARC.

Reply via email to