This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH] Properly handle __cxa_pure_virtual visibility (PR lto/79760).
- From: Martin Liška <mliska at suse dot cz>
- To: GCC Patches <gcc-patches at gcc dot gnu dot org>
- Cc: Jan Hubicka <hubicka at ucw dot cz>
- Date: Fri, 3 Mar 2017 12:57:02 +0100
- Subject: [PATCH] Properly handle __cxa_pure_virtual visibility (PR lto/79760).
- Authentication-results: sourceware.org; auth=none
Hello.
I'm sending Honza's patch (which is pre-approved) that I've just tested on ppc64le-redhat-linux.
It also fixes the issue spotted in the PR.
Martin
>From 10050e47af7dbf217469da083666b16dbbbf606d Mon Sep 17 00:00:00 2001
From: marxin <mliska@suse.cz>
Date: Thu, 2 Mar 2017 18:46:25 +0100
Subject: [PATCH] Properly handle __cxa_pure_virtual visibility (PR lto/79760).
gcc/ChangeLog:
2017-03-02 Jan Hubicka <jh@suse.cz>
PR lto/79760
* ipa-devirt.c (maybe_record_node): Properly handle
__cxa_pure_virtual visibility.
---
gcc/ipa-devirt.c | 17 +++++++++++++----
1 file changed, 13 insertions(+), 4 deletions(-)
diff --git a/gcc/ipa-devirt.c b/gcc/ipa-devirt.c
index 4428d679722..0e5eb85b61d 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;
}
--
2.11.1