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

--- Comment #2 from Marc Glisse <glisse at gcc dot gnu.org> ---
Or with less templates:

struct A {
  A() = default;
  union S {
    constexpr S() noexcept : e() { }
    struct {} e;
    int i;
  } s;
  bool b = false;
};
struct B : A {
  B() = default;
  using A::A;
};
B f() { return {}; }


        movl    $0, -12(%rsp)
        movq    -16(%rsp), %rax
        ret

instead of a plain

        xorl    %eax, %eax

optimized dump is

  MEM <char[4]> [(struct B *)&D.2265 + 4B] = {};
  MEM[(union S *)&D.2265] ={v} {CLOBBER};
  D.2275 = D.2265;
  D.2265 ={v} {CLOBBER};
  return D.2275;

expand

(insn 5 2 6 2 (set (mem/c:SI (plus:DI (reg/f:DI 77 virtual-stack-vars)
                (const_int -12 [0xfffffffffffffff4])) [7 MEM <char[4]> [(struct
B *)&D.2265 + 4B]+0 S4 A32])
        (const_int 0 [0])) "o.cc":14:17 -1
     (nil))
(insn 6 5 7 2 (set (reg:DI 83)
        (mem/c:DI (plus:DI (reg/f:DI 77 virtual-stack-vars)
                (const_int -16 [0xfffffffffffffff0])) [7 D.2265+0 S8 A64]))
"o.cc":14:17 -1
     (nil))
(insn 7 6 8 2 (set (mem/c:DI (plus:DI (reg/f:DI 77 virtual-stack-vars)
                (const_int -8 [0xfffffffffffffff8])) [7 D.2275+0 S8 A64])
        (reg:DI 83)) "o.cc":14:17 -1
     (nil))
(insn 8 7 9 2 (set (reg:DI 84)
        (const_int 0 [0])) "o.cc":14:17 -1
     (nil))
(insn 9 8 10 2 (set (reg:DI 84)
        (mem/c:DI (plus:DI (reg/f:DI 77 virtual-stack-vars)
                (const_int -8 [0xfffffffffffffff8])) [7 D.2275+0 S8 A64]))
"o.cc":14:17 -1
     (nil))
(insn 10 9 11 2 (set (reg:DI 85)
        (reg:DI 84)) "o.cc":14:17 -1
     (nil))
(insn 11 10 15 2 (set (reg:DI 82 [ <retval> ])
        (reg:DI 85)) "o.cc":14:17 -1
     (nil))
(insn 15 11 16 2 (set (reg/i:DI 0 ax)
        (reg:DI 82 [ <retval> ])) "o.cc":14:20 -1
     (nil))
(insn 16 15 0 2 (use (reg/i:DI 0 ax)) "o.cc":14:20 -1
     (nil))

and dfinish

(insn:TI 5 2 15 2 (set (mem/c:SI (plus:DI (reg/f:DI 7 sp)
                (const_int -12 [0xfffffffffffffff4])) [7 MEM <char[4]> [(struct
B *)&D.2265 + 4B]+0 S4 A32])
        (const_int 0 [0])) "o.cc":14:17 67 {*movsi_internal}
     (nil))
(insn 15 5 16 2 (set (reg/i:DI 0 ax)
        (mem/c:DI (plus:DI (reg/f:DI 7 sp)
                (const_int -16 [0xfffffffffffffff0])) [7 D.2265+0 S8 A64]))
"o.cc":14:20 66 {*movdi_internal}
     (nil))
(insn 16 15 25 2 (use (reg/i:DI 0 ax)) "o.cc":14:20 -1
     (nil))

Reply via email to