aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2019-04-25 11:15:35 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2019-04-25 11:15:35 +0000
commitf469220df6185dee831686631c570245769887da (patch)
tree39ced2244370f095aa82245a8bfb75a1ad2ea628
parent9168f22057a72822f0d2ca5b1053e97becd649fa (diff)
downloadgcc-f469220df6185dee831686631c570245769887da.zip
gcc-f469220df6185dee831686631c570245769887da.tar.gz
gcc-f469220df6185dee831686631c570245769887da.tar.bz2
re PR middle-end/90194 (ICE in expand_debug_expr, at cfgexpand.c:5244)
2019-04-25 Richard Biener <rguenther@suse.de> 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
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/match.pd7
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/torture/pr90194.C18
4 files changed, 36 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index d4c5b31..2aeafe1 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2019-04-25 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/90194
+ * match.pd: Add pattern to simplify view-conversion of an
+ empty constructor.
+
2019-04-24 Clement Chigot <clement.chigot@atos.net>
* config/rs6000/aix71.h (SUBTARGET_OVERRIDE_OPTIONS): Disable
diff --git a/gcc/match.pd b/gcc/match.pd
index 0d82bea..039ddac 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 115c220..f1291f1 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2019-04-25 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/90194
+ * g++.dg/torture/pr90194.C: New testcase.
+
2019-04-24 Marek Polacek <polacek@redhat.com>
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 0000000..f0c3a77
--- /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 { };
+}