On 6/7/25 1:04 AM, Andrew Pinski wrote:
Currently expand_constructor when it comes to BLKmode types, we store out
the constructor to memory. But for the zero case, we could just use `const_int 
0`
instead for types who are less than or equal to BITS_PER_WORD.
This is only valid if we expanding without a target.

This fixes the storing zeros of `char[3]` and `char[7]` into registers.

Boostrapped and tested on x86_64-linux-gnu.
Build and tested for aarch64-linux-gnu.

        PR middle-end/110459

gcc/ChangeLog:

        * expr.cc (expand_constructor): For expansion of `{}` without a target
        and the size is less than BITS_PER_WORD, just return the constant 0.

gcc/testsuite/ChangeLog:

        * g++.target/aarch64/array-return-1.C: New test.
        * g++.target/i386/array-return-1.C: New test.
OK. I guess. My worry is that even for a non-addressable, we can't do directly BLKmode assignments and this increases the risk that one of those creeps in. Though emit_move_insn and friend check for this IIRC. So I don't have a concrete objection, just a vague uneasiness :-)

So I'll ACK.  But we probably need to keep an eye out for fallout.

jeff

Reply via email to