diff options
| author | hubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4> | 2014-10-05 02:50:01 +0000 |
|---|---|---|
| committer | hubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4> | 2014-10-05 02:50:01 +0000 |
| commit | 37625fa19e4aefd016eacc568822e99fa026236b (patch) | |
| tree | 1a9befee9b0a5a483a7d283b5a0cd7582f829a48 | |
| parent | 5ce1c5afa462b69f3d4f1335fd641a3dda472476 (diff) | |
| download | ppe42-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/ChangeLog | 6 | ||||
| -rw-r--r-- | gcc/ipa-devirt.c | 3 | ||||
| -rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
| -rw-r--r-- | gcc/testsuite/g++.dg/torture/pr62121.C | 12 |
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](); |

