From: Richard Biener Date: Thu, 25 Apr 2019 11:15:35 +0000 (+0000) Subject: re PR middle-end/90194 (ICE in expand_debug_expr, at cfgexpand.c:5244) X-Git-Tag: basepoints/gcc-10~10 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f469220df6185dee831686631c570245769887da;p=thirdparty%2Fgcc.git re PR middle-end/90194 (ICE in expand_debug_expr, at cfgexpand.c:5244) 2019-04-25 Richard Biener PR middle-end/90194 * match.pd: Add pattern to simplify view-conversion of an empty constructor. * g++.dg/torture/pr90194.C: New testcase. From-SVN: r270569 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d4c5b31613c5..2aeafe1d30c3 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2019-04-25 Richard Biener + + PR middle-end/90194 + * match.pd: Add pattern to simplify view-conversion of an + empty constructor. + 2019-04-24 Clement Chigot * config/rs6000/aix71.h (SUBTARGET_OVERRIDE_OPTIONS): Disable diff --git a/gcc/match.pd b/gcc/match.pd index 0d82beab45b1..039ddacfed1e 100644 --- a/gcc/match.pd +++ b/gcc/match.pd @@ -2596,6 +2596,13 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) && TYPE_UNSIGNED (TREE_TYPE (@1))))) (view_convert @1))) +/* Simplify a view-converted empty constructor. */ +(simplify + (view_convert CONSTRUCTOR@0) + (if (TREE_CODE (@0) != SSA_NAME + && CONSTRUCTOR_NELTS (@0) == 0) + { build_zero_cst (type); })) + /* Re-association barriers around constants and other re-association barriers can be removed. */ (simplify diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 115c22088ef4..f1291f11c52d 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2019-04-25 Richard Biener + + PR middle-end/90194 + * g++.dg/torture/pr90194.C: New testcase. + 2019-04-24 Marek Polacek PR c++/90236 diff --git a/gcc/testsuite/g++.dg/torture/pr90194.C b/gcc/testsuite/g++.dg/torture/pr90194.C new file mode 100644 index 000000000000..f0c3a77db8af --- /dev/null +++ b/gcc/testsuite/g++.dg/torture/pr90194.C @@ -0,0 +1,18 @@ +// { dg-do compile } +// { dg-additional-options "-g" } + +struct cb { + int yr; +}; + +void * +operator new (__SIZE_TYPE__, void *nq) +{ + return nq; +} + +void +af (int xn) +{ + new (&xn) cb { }; +}