For PR797:
Remove exception throwing/handling from lib/Bytecode, and adjust its users
to compensate for changes in the interface.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29875 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Bytecode/Archive/ArchiveReader.cpp b/lib/Bytecode/Archive/ArchiveReader.cpp
index 38aa072..e4769ca 100644
--- a/lib/Bytecode/Archive/ArchiveReader.cpp
+++ b/lib/Bytecode/Archive/ArchiveReader.cpp
@@ -475,14 +475,16 @@
   const char* modptr = base + fileOffset;
   ArchiveMember* mbr = parseMemberHeader(modptr, base + mapfile->size(),ErrMsg);
   if (!mbr)
-    return false;
+    return 0;
 
   // Now, load the bytecode module to get the ModuleProvider
   std::string FullMemberName = archPath.toString() + "(" +
     mbr->getPath().toString() + ")";
   ModuleProvider* mp = getBytecodeBufferModuleProvider(
       (const unsigned char*) mbr->getData(), mbr->getSize(),
-      FullMemberName, 0);
+      FullMemberName, ErrMsg, 0);
+  if (!mp)
+    return 0;
 
   modules.insert(std::make_pair(fileOffset, std::make_pair(mp, mbr)));
 
@@ -523,7 +525,7 @@
         std::string FullMemberName = archPath.toString() + "(" +
           mbr->getPath().toString() + ")";
         ModuleProvider* MP = GetBytecodeSymbols((const unsigned char*)At,
-            mbr->getSize(), FullMemberName, symbols);
+            mbr->getSize(), FullMemberName, symbols, error);
 
         if (MP) {
           // Insert the module's symbols into the symbol table
@@ -537,7 +539,7 @@
         } else {
           if (error)
             *error = "Can't parse bytecode member: " + 
-              mbr->getPath().toString();
+              mbr->getPath().toString() + ": " + *error;
           delete mbr;
           return false;
         }
diff --git a/lib/Bytecode/Archive/ArchiveWriter.cpp b/lib/Bytecode/Archive/ArchiveWriter.cpp
index 3746dbf..096a999 100644
--- a/lib/Bytecode/Archive/ArchiveWriter.cpp
+++ b/lib/Bytecode/Archive/ArchiveWriter.cpp
@@ -223,7 +223,7 @@
       member.getPath().toString()
       + ")";
     ModuleProvider* MP = GetBytecodeSymbols(
-      (const unsigned char*)data,fSize,FullMemberName, symbols);
+      (const unsigned char*)data,fSize,FullMemberName, symbols, ErrMsg);
 
     // If the bytecode parsed successfully
     if ( MP ) {
@@ -247,7 +247,8 @@
         delete mFile;
       }
       if (ErrMsg)
-        *ErrMsg = "Can't parse bytecode member: " + member.getPath().toString();
+        *ErrMsg = "Can't parse bytecode member: " + member.getPath().toString()
+          + ": " + *ErrMsg;
       return true;
     }
   }