diff options
author | Jan Hubicka <jh@suse.cz> | 2017-03-03 12:58:03 +0100 |
---|---|---|
committer | Martin Liska <marxin@gcc.gnu.org> | 2017-03-03 11:58:03 +0000 |
commit | 8479ed2c47d9d9384180381f2af7c0a9dc03cc4e (patch) | |
tree | 0d31863fa6d0d04b1edd86997607abf7006b15bb /gcc | |
parent | d78a1c01dbb859cb406ffdea3bc2ced2963cae9a (diff) | |
download | gcc-8479ed2c47d9d9384180381f2af7c0a9dc03cc4e.zip gcc-8479ed2c47d9d9384180381f2af7c0a9dc03cc4e.tar.gz gcc-8479ed2c47d9d9384180381f2af7c0a9dc03cc4e.tar.bz2 |
Properly handle __cxa_pure_virtual visibility (PR lto/79760).
2017-03-03 Jan Hubicka <jh@suse.cz>
PR lto/79760
* ipa-devirt.c (maybe_record_node): Properly handle
__cxa_pure_virtual visibility.
From-SVN: r245870
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/ipa-devirt.c | 17 |
2 files changed, 19 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 68a03df..1fa51dd 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2017-03-03 Jan Hubicka <jh@suse.cz> + + PR lto/79760 + * ipa-devirt.c (maybe_record_node): Properly handle + __cxa_pure_virtual visibility. + 2017-03-03 Martin Liska <mliska@suse.cz> PR tree-optimization/79803 diff --git a/gcc/ipa-devirt.c b/gcc/ipa-devirt.c index 4428d67..0e5eb85 100644 --- a/gcc/ipa-devirt.c +++ b/gcc/ipa-devirt.c @@ -2462,10 +2462,19 @@ maybe_record_node (vec <cgraph_node *> &nodes, nodes.safe_push (target_node); } } - else if (completep - && (!type_in_anonymous_namespace_p - (DECL_CONTEXT (target)) - || flag_ltrans)) + else if (!completep) + ; + /* We have definition of __cxa_pure_virtual that is not accessible (it is + optimized out or partitioned to other unit) so we can not add it. When + not sanitizing, there is nothing to do. + Otherwise declare the list incomplete. */ + else if (pure_virtual) + { + if (flag_sanitize & SANITIZE_UNREACHABLE) + *completep = false; + } + else if (flag_ltrans + || !type_in_anonymous_namespace_p (DECL_CONTEXT (target))) *completep = false; } |