aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2014-11-24 07:49:08 -0500
committerJason Merrill <jason@gcc.gnu.org>2014-11-24 07:49:08 -0500
commitf9b1eec21582f7801a8ca57463080331db95f2fb (patch)
tree52c9152dc1591fb04a2175e3c1536f43a2855c8c /gcc
parent691b9fb7a2a752995591b9e1196d0e8588401d51 (diff)
downloadgcc-f9b1eec21582f7801a8ca57463080331db95f2fb.zip
gcc-f9b1eec21582f7801a8ca57463080331db95f2fb.tar.gz
gcc-f9b1eec21582f7801a8ca57463080331db95f2fb.tar.bz2
re PR c++/63942 (constexpr conflicts with previous declaration)
PR c++/63942 * mangle.c (mangle_decl): If we aren't going to create a symbol alias, don't build the alias DECL either. From-SVN: r218016
Diffstat (limited to 'gcc')
-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