diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 1e072301b9a9b3d7bb2bb63b3b23d608bdcbaec5..214f36f240583dd9084fad38840681fad59de96e 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 3bcefbbdb95a3c995352f47608f29b85739ad517..ea06bf7ad8f13ecd4fc693afc924e31a02601d62 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 a9ea6c35c86bc7a7c936a62ceb663d6d5189d539..dd95858ba403388a0c4759b726865ce681b83b2d 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 d73d94383b8ee36d0136dbbf0f107c43dd539b61..f49b4da7f9a10f0779766bdb6c5ee987ed1a26a8 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_" } }