aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJan Hubicka <jh@suse.cz>2017-03-03 12:58:03 +0100
committerMartin Liska <marxin@gcc.gnu.org>2017-03-03 11:58:03 +0000
commit8479ed2c47d9d9384180381f2af7c0a9dc03cc4e (patch)
tree0d31863fa6d0d04b1edd86997607abf7006b15bb /gcc
parentd78a1c01dbb859cb406ffdea3bc2ced2963cae9a (diff)
downloadgcc-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/ChangeLog6
-rw-r--r--gcc/ipa-devirt.c17
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;
}