diff --git a/gold/ChangeLog b/gold/ChangeLog
index 18a465b96db..a92796ab8aa 100644
--- a/gold/ChangeLog
+++ b/gold/ChangeLog
@@ -1,3 +1,10 @@
+2010-01-08  Ian Lance Taylor  <iant@google.com>
+
+	* script.cc (Version_script_info::build_expression_list_lookup):
+	Don't warn about ambiguous version, just record the ambiguity.
+	(Version_script_info::get_symbol_version_helper): Give error if
+	version is ambiguous.
+
 2010-01-08  Doug Kwan  <dougkwan@google.com>
 
 	* arm.cc (Stub_table::Stub_table): Initalize cortex_a8_stubs_,
diff --git a/gold/script.cc b/gold/script.cc
index 42390405472..ce0605206b1 100644
--- a/gold/script.cc
+++ b/gold/script.cc
@@ -1957,11 +1957,13 @@ Version_script_info::build_expression_list_lookup(
 	  if (!ins.second)
 	    {
 	      const Version_tree* v1 = ins.first->second;
-	      if (v1->tag != v->tag)
-		gold_error(_("'%s' appears in version script with both "
-			     "versions '%s' and '%s'"),
-			   exp.pattern.c_str(), v1->tag.c_str(),
-			   v->tag.c_str());
+	      if (v1 != NULL && v1->tag != v->tag)
+		{
+		  // This is an ambiguous match.  It's OK if it's just
+		  // documenting symbol versions, but not if we look
+		  // up this symbol.
+		  ins.first->second = NULL;
+		}
 	    }
 	}
     }
@@ -2037,7 +2039,16 @@ Version_script_info::get_symbol_version_helper(const char* symbol_name,
       if (pe != lookup->exact.end())
 	{
 	  if (pversion != NULL)
-	    *pversion = pe->second->tag;
+	    {
+	      if (pe->second != NULL)
+		*pversion = pe->second->tag;
+	      else
+		{
+		  gold_error(_("'%s' has multiple versions in version script"),
+			     name_to_match);
+		  return false;
+		}
+	    }
 
 	  // If we are using --no-undefined-version, and this is a
 	  // global symbol, we have to record that we have found this