From 1b88f240b95de117532dfcdc95280b6c05dc6500 Mon Sep 17 00:00:00 2001
From: Jason Merrill <jason@redhat.com>
Date: Fri, 5 Mar 2010 17:44:56 -0500
Subject: [PATCH] mangle.c (mangle_decl): Give name collision error even
 without ASM_OUTPUT_DEF.

	* mangle.c (mangle_decl): Give name collision error even without
	ASM_OUTPUT_DEF.
	* g++.dg/abi/mangle40.C: Require weak and alias.

From-SVN: r157245
---
 gcc/cp/ChangeLog                    | 5 +++++
 gcc/cp/mangle.c                     | 6 ++++--
 gcc/testsuite/ChangeLog             | 4 ++++
 gcc/testsuite/g++.dg/abi/mangle40.C | 2 ++
 4 files changed, 15 insertions(+), 2 deletions(-)

diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 1e072301b9a9..214f36f24058 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,8 @@
+2010-03-05  Jason Merrill  <jason@redhat.com>
+
+	* mangle.c (mangle_decl): Give name collision error even without
+	ASM_OUTPUT_DEF.
+
 2010-03-04  Marco Poletti  <poletti.marco@gmail.com>
 
 	* pt.c (process_partial_specialization): Use error_n instead of
diff --git a/gcc/cp/mangle.c b/gcc/cp/mangle.c
index 3bcefbbdb95a..ea06bf7ad8f1 100644
--- a/gcc/cp/mangle.c
+++ b/gcc/cp/mangle.c
@@ -3057,19 +3057,21 @@ mangle_decl (const tree decl)
   id = targetm.mangle_decl_assembler_name (decl, id);
   SET_DECL_ASSEMBLER_NAME (decl, id);
 
-#ifdef ASM_OUTPUT_DEF
   if (G.need_abi_warning)
     {
+#ifdef ASM_OUTPUT_DEF
       /* If the mangling will change in the future, emit an alias with the
 	 future mangled name for forward-compatibility.  */
       int save_ver;
       tree id2, alias;
+#endif
 
       SET_IDENTIFIER_GLOBAL_VALUE (id, decl);
       if (IDENTIFIER_GLOBAL_VALUE (id) != decl)
 	inform (DECL_SOURCE_LOCATION (decl), "-fabi-version=4 (or =0) "
 		"avoids this error with a change in vector mangling");
 
+#ifdef ASM_OUTPUT_DEF
       save_ver = flag_abi_version;
       flag_abi_version = 0;
       id2 = mangle_decl_string (decl);
@@ -3086,8 +3088,8 @@ mangle_decl (const tree decl)
 	cgraph_same_body_alias (alias, decl);
       else
 	varpool_extra_name_alias (alias, decl);
-    }
 #endif
+    }
 }
 
 /* Generate the mangled representation of TYPE.  */
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index a9ea6c35c86b..dd95858ba403 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2010-03-05  Jason Merrill  <jason@redhat.com>
+
+	* g++.dg/abi/mangle40.C: Require weak and alias.
+
 2010-03-05  Sebastian Pop  <sebastian.pop@amd.com>
 
 	PR middle-end/42326
diff --git a/gcc/testsuite/g++.dg/abi/mangle40.C b/gcc/testsuite/g++.dg/abi/mangle40.C
index d73d94383b8e..f49b4da7f9a1 100644
--- a/gcc/testsuite/g++.dg/abi/mangle40.C
+++ b/gcc/testsuite/g++.dg/abi/mangle40.C
@@ -1,5 +1,7 @@
 // PR c++/12909
 // { dg-do compile { target i?86-*-* x86_64-*-* } }
+// { dg-require-weak }
+// { dg-require-alias }
 // { dg-options "-mavx -Wabi -fabi-version=2" }
 // { dg-final { scan-assembler "weak\[^\n\]*_Z1fIDv4_fEvT_" } }
 // { dg-final { scan-assembler "weak\[^\n\]*_Z1fIU8__vectorfEvT_" } }
-- 
GitLab