aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/mangle.c12
2 files changed, 13 insertions, 5 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index aaa4f29..d23bad5 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,9 @@
+2014-11-24 Jason Merrill <jason@redhat.com>
+
+ PR c++/63942
+ * mangle.c (mangle_decl): If we aren't going to create a symbol
+ alias, don't build the alias DECL either.
+
2014-11-24 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/63905
diff --git a/gcc/cp/mangle.c b/gcc/cp/mangle.c
index a244669..71a6e3b 100644
--- a/gcc/cp/mangle.c
+++ b/gcc/cp/mangle.c
@@ -3518,6 +3518,12 @@ mangle_decl (const tree decl)
if (IDENTIFIER_GLOBAL_VALUE (id2))
return;
+ struct cgraph_node *n = NULL;
+ if (TREE_CODE (decl) == FUNCTION_DECL
+ && !(n = cgraph_node::get (decl)))
+ /* Don't create an alias to an unreferenced function. */
+ return;
+
tree alias = make_alias_for (decl, id2);
SET_IDENTIFIER_GLOBAL_VALUE (id2, alias);
DECL_IGNORED_P (alias) = 1;
@@ -3526,11 +3532,7 @@ mangle_decl (const tree decl)
if (vague_linkage_p (decl))
DECL_WEAK (alias) = 1;
if (TREE_CODE (decl) == FUNCTION_DECL)
- {
- /* Don't create an alias to an unreferenced function. */
- if (struct cgraph_node *n = cgraph_node::get (decl))
- n->create_same_body_alias (alias, decl);
- }
+ n->create_same_body_alias (alias, decl);
else
varpool_node::create_extra_name_alias (alias, decl);
#endif