summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>2014-10-05 02:50:01 +0000
committerhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>2014-10-05 02:50:01 +0000
commit37625fa19e4aefd016eacc568822e99fa026236b (patch)
tree1a9befee9b0a5a483a7d283b5a0cd7582f829a48
parent5ce1c5afa462b69f3d4f1335fd641a3dda472476 (diff)
downloadppe42-gcc-37625fa19e4aefd016eacc568822e99fa026236b.tar.gz
ppe42-gcc-37625fa19e4aefd016eacc568822e99fa026236b.zip
PR ipa/62121
* ipa-devirt.c (restrict_to_inner_class): Do not ICE when type is unknown. * g++.dg/torture/pr62121.C: New testcase. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_9-branch@215895 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/ipa-devirt.c3
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/torture/pr62121.C12
4 files changed, 25 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 0f9d230ed8b..f58b0431e49 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,11 @@
2014-10-03 Jan Hubicka <hubicka@ucw.cz>
+ PR ipa/62121
+ * ipa-devirt.c (restrict_to_inner_class): Do not ICE when type is
+ unknown.
+
+2014-10-03 Jan Hubicka <hubicka@ucw.cz>
+
PR lto/62026
* lto-streamer-out.c (lto_output): Handle thunks correctly.
* cgraphclones.c (duplicate_thunk_for_node): Get thunk's arguments.
diff --git a/gcc/ipa-devirt.c b/gcc/ipa-devirt.c
index f1c36aaaae1..db00b285fc9 100644
--- a/gcc/ipa-devirt.c
+++ b/gcc/ipa-devirt.c
@@ -994,7 +994,8 @@ give_up:
if ((TREE_CODE (type) != RECORD_TYPE
|| !TYPE_BINFO (type)
|| !polymorphic_type_binfo_p (TYPE_BINFO (type)))
- && (TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST
+ && (!TYPE_SIZE (type)
+ || TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST
|| (offset + tree_to_uhwi (TYPE_SIZE (expected_type)) <=
tree_to_uhwi (TYPE_SIZE (type)))))
return true;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index b313230a398..1f02fbccd33 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,10 @@
2014-10-03 Jan Hubicka <hubicka@ucw.cz>
+ PR ipa/62121
+ * g++.dg/torture/pr62121.C: New testcase.
+
+2014-10-03 Jan Hubicka <hubicka@ucw.cz>
+
PR lto/62026
* g++.dg/lto/pr62026.C: New testcase.
diff --git a/gcc/testsuite/g++.dg/torture/pr62121.C b/gcc/testsuite/g++.dg/torture/pr62121.C
new file mode 100644
index 00000000000..de1196a62e1
--- /dev/null
+++ b/gcc/testsuite/g++.dg/torture/pr62121.C
@@ -0,0 +1,12 @@
+// { dg-do compile }
+class A
+{
+ virtual double operator()();
+};
+class B : A
+{
+public:
+ double operator()();
+};
+extern B a[];
+int b = a[0]();
OpenPOWER on IntegriCloud