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.