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

--- Comment #6 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Jakub Jelinek <ja...@gcc.gnu.org>:

https://gcc.gnu.org/g:550880a31688f1031a21efe7923c86db423cbbf1

commit r11-6321-g550880a31688f1031a21efe7923c86db423cbbf1
Author: Jakub Jelinek <ja...@redhat.com>
Date:   Wed Dec 23 22:45:56 2020 +0100

    c++: Fix up floating point complex handling in build_zero_init_1 [PR98353]

    While the gimplifier patch I've just committed fixed an ICE, in some cases
    like on the committed testcase cp folding doesn't happen after
    build_zero_init_1 because it is called already during gimplification.

    For the scalar types, if we want to use convert, the problem with complex
floats
    is that it returns a COMPLEX_EXPR with FLOAT_EXPR arguments which have
    INTEGER_CST 0 as argument.  As fold isn't recursive, it doesn't do anything
    in that case, we need to first fold those FLOAT_EXPRs to REAL_CST 0.0 and
    only afterwards the COMPLEX_EXPR can be folded into COMPLEX_CST with 0.0
    arguments.

    This patch instead just uses build_zero_cst that creates the zero constant
for
    any scalar types (and more) directly, instead of going through multiple
hops.

    2020-12-23  Jakub Jelinek  <ja...@redhat.com>

            PR c++/98353
            * init.c (build_zero_init_1): Use build_zero_cst for SCALAR_TYPE_P
            zero initializers.

Reply via email to