aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2018-02-20 09:22:31 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2018-02-20 09:22:31 +0100
commit393d9df7b33313418ae8921cdb587537bd641c1c (patch)
tree8d965bbfbec0533f9328e4de75597e5365ac870d /gcc
parent7f5753d71568610ad29a5cd2af7840d6be26442f (diff)
downloadgcc-393d9df7b33313418ae8921cdb587537bd641c1c.zip
gcc-393d9df7b33313418ae8921cdb587537bd641c1c.tar.gz
gcc-393d9df7b33313418ae8921cdb587537bd641c1c.tar.bz2
re PR c++/84445 (ICE with __builtin_launder and virtual function)
PR c++/84445 * class.c (fixed_type_or_null) <case CALL_EXPR>: Only test TREE_HAS_CONSTRUCTOR if instance is not an internal function call. * g++.dg/cpp1z/launder7.C: New test. From-SVN: r257840
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog4
-rw-r--r--gcc/cp/class.c3
-rw-r--r--gcc/testsuite/ChangeLog3
-rw-r--r--gcc/testsuite/g++.dg/cpp1z/launder7.C10
4 files changed, 19 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 8a786bb..1e0f9eb 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,5 +1,9 @@
2018-02-20 Jakub Jelinek <jakub@redhat.com>
+ PR c++/84445
+ * class.c (fixed_type_or_null) <case CALL_EXPR>: Only test
+ TREE_HAS_CONSTRUCTOR if instance is not an internal function call.
+
PR c++/84449
* tree.c (bot_manip): If build_cplus_new or break_out_target_exprs
returns error_mark_node, return it immediately.
diff --git a/gcc/cp/class.c b/gcc/cp/class.c
index 296305e..afa5c41 100644
--- a/gcc/cp/class.c
+++ b/gcc/cp/class.c
@@ -7128,7 +7128,8 @@ fixed_type_or_null (tree instance, int *nonnull, int *cdtorp)
case CALL_EXPR:
/* This is a call to a constructor, hence it's never zero. */
- if (TREE_HAS_CONSTRUCTOR (instance))
+ if (CALL_EXPR_FN (instance)
+ && TREE_HAS_CONSTRUCTOR (instance))
{
if (nonnull)
*nonnull = 1;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index fd21d3b..29157ac 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,8 @@
2018-02-20 Jakub Jelinek <jakub@redhat.com>
+ PR c++/84445
+ * g++.dg/cpp1z/launder7.C: New test.
+
PR c++/84449
* g++.dg/cpp0x/constexpr-84449.C: New test.
diff --git a/gcc/testsuite/g++.dg/cpp1z/launder7.C b/gcc/testsuite/g++.dg/cpp1z/launder7.C
new file mode 100644
index 0000000..e418329
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp1z/launder7.C
@@ -0,0 +1,10 @@
+// PR c++/84445
+// { dg-do compile }
+
+struct A { virtual void foo (); };
+
+void
+bar (A *p)
+{
+ __builtin_launder (p)->foo ();
+}