aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorMarek Polacek <polacek@redhat.com>2016-05-27 12:08:03 +0000
committerMarek Polacek <mpolacek@gcc.gnu.org>2016-05-27 12:08:03 +0000
commit3cee7e4e2badde2374fc77bb8f3a072e1698d1fe (patch)
treec24dc36f07c388a6b4104094fe4e3af8ce613c44 /gcc
parent3168e073cbed6698c035fd16abd2fc8d59e4bec8 (diff)
downloadgcc-3cee7e4e2badde2374fc77bb8f3a072e1698d1fe.zip
gcc-3cee7e4e2badde2374fc77bb8f3a072e1698d1fe.tar.gz
gcc-3cee7e4e2badde2374fc77bb8f3a072e1698d1fe.tar.bz2
re PR middle-end/71308 (ICE (segfault) in in gimple_fold_call gimple-fold.c:3060)
PR middle-end/71308 * gimple-fold.c (gimple_fold_call): Check that LHS is not null. * g++.dg/torture/pr71308.C: New test. From-SVN: r236815
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/gimple-fold.c3
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/torture/pr71308.C18
4 files changed, 30 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 67a20e9..14ba165 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2016-05-27 Marek Polacek <polacek@redhat.com>
+
+ PR middle-end/71308
+ * gimple-fold.c (gimple_fold_call): Check that LHS is not null.
+
2016-05-27 Andreas Krebbel <krebbel@linux.vnet.ibm.com>
* config/s390/s390.md (2x risbg splitters): Use
diff --git a/gcc/gimple-fold.c b/gcc/gimple-fold.c
index d6657e9..600aa72 100644
--- a/gcc/gimple-fold.c
+++ b/gcc/gimple-fold.c
@@ -3053,7 +3053,8 @@ gimple_fold_call (gimple_stmt_iterator *gsi, bool inplace)
== void_type_node))
gimple_call_set_fntype (stmt, TREE_TYPE (fndecl));
/* If the call becomes noreturn, remove the lhs. */
- if (gimple_call_noreturn_p (stmt)
+ if (lhs
+ && gimple_call_noreturn_p (stmt)
&& (VOID_TYPE_P (TREE_TYPE (gimple_call_fntype (stmt)))
|| should_remove_lhs_p (lhs)))
{
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index c209d98..e556f3a 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2016-05-27 Marek Polacek <polacek@redhat.com>
+
+ PR middle-end/71308
+ * g++.dg/torture/pr71308.C: New test.
+
2016-05-27 Dominik Vogt <vogt@linux.vnet.ibm.com>
* gcc.dg/zero_bits_compound-1.c: New test.
diff --git a/gcc/testsuite/g++.dg/torture/pr71308.C b/gcc/testsuite/g++.dg/torture/pr71308.C
new file mode 100644
index 0000000..ff5cd95
--- /dev/null
+++ b/gcc/testsuite/g++.dg/torture/pr71308.C
@@ -0,0 +1,18 @@
+// PR middle-end/71308
+// { dg-do compile }
+
+class S
+{
+ void foo ();
+ virtual void bar () = 0;
+ virtual ~S ();
+};
+inline void
+S::foo ()
+{
+ bar ();
+};
+S::~S ()
+{
+ foo ();
+}