llvm-symbolizer: be more careful with colons in file names

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@186493 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/tools/llvm-symbolizer/LLVMSymbolize.cpp b/tools/llvm-symbolizer/LLVMSymbolize.cpp
index 1945d68..4f6e0cf 100644
--- a/tools/llvm-symbolizer/LLVMSymbolize.cpp
+++ b/tools/llvm-symbolizer/LLVMSymbolize.cpp
@@ -278,15 +278,14 @@
     return I->second;
   std::string BinaryName = ModuleName;
   std::string ArchName = Opts.DefaultArch;
-  size_t ColonPos = ModuleName.find(':');
-#if defined(_WIN32)
-  // Recognize a drive letter on win32.
-  if (ColonPos == 1 && isalpha(ModuleName[0]))
-    ColonPos = ModuleName.find(':', 2);
-#endif
+  size_t ColonPos = ModuleName.find_last_of(':');
+  // Verify that substring after colon form a valid arch name.
   if (ColonPos != std::string::npos) {
-    BinaryName = ModuleName.substr(0, ColonPos);
-    ArchName = ModuleName.substr(ColonPos + 1);
+    std::string ArchStr = ModuleName.substr(ColonPos + 1);
+    if (Triple(ArchStr).getArch() != Triple::ArchType::UnknownArch) {
+      BinaryName = ModuleName.substr(0, ColonPos);
+      ArchName = ArchStr;
+    }
   }
   BinaryPair Binaries = getOrCreateBinary(BinaryName);
   ObjectFile *Obj = getObjectFileFromBinary(Binaries.first, ArchName);