Per code review:\
authorReid Spencer <rspencer@reidspencer.com>
Tue, 16 Nov 2004 06:47:41 +0000 (06:47 +0000)
committerReid Spencer <rspencer@reidspencer.com>
Tue, 16 Nov 2004 06:47:41 +0000 (06:47 +0000)
* Adjust indentation\
* Ensure memory do not leak if exceptions happen (std::auto_ptr use)

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@17885 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Linker/LinkArchives.cpp

index 2cccc983ecdc8577d2ed4198a0c8818533c413dc..1f4559ca9467493558aa7ed75c0d6239f357fc00 100644 (file)
@@ -163,9 +163,9 @@ static std::auto_ptr<Module> LoadObject(const std::string &FN,
 ///  FALSE - No errors.
 ///
 bool llvm::LinkInArchive(Module *M,
-                          const std::string &Filename,
-                          std::string* ErrorMessage,
-                          bool Verbose)
+                         const std::string &Filename,
+                         std::string* ErrorMessage,
+                         bool Verbose)
 {
   // Find all of the symbols currently undefined in the bytecode program.
   // If all the symbols are defined, the program is complete, and there is
@@ -179,13 +179,16 @@ bool llvm::LinkInArchive(Module *M,
 
   // Open the archive file
   if (Verbose) std::cerr << "  Loading archive file '" << Filename << "'\n";
-  Archive* arch = Archive::OpenAndLoadSymbols(sys::Path(Filename));
+  std::auto_ptr<Archive> AutoArch (
+    Archive::OpenAndLoadSymbols(sys::Path(Filename)));
+
+  Archive* arch = AutoArch.get();
 
   // While we are linking in object files, loop.
   while (true) {     
     std::set<ModuleProvider*> Modules;
     // Find the modules we need to link
-    arch->findModulesDefiningSymbols(UndefinedSymbols,Modules);
+    arch->findModulesDefiningSymbols(UndefinedSymbols, Modules);
 
     // If we didn't find any more modules to link this time, we are done.
     if (Modules.empty())
@@ -195,14 +198,13 @@ bool llvm::LinkInArchive(Module *M,
     for (std::set<ModuleProvider*>::iterator I=Modules.begin(), E=Modules.end();
          I != E; ++I) {
       // Get the module we must link in.
-      std::auto_ptr<Module> aModule((*I)->releaseModule());
+      std::auto_ptr<Module> AutoModule( (*I)->releaseModule() );
+
+      Module* aModule = AutoModule.get();
 
-      // Link it in.
-      if (LinkModules(M, aModule.get(), ErrorMessage)) {
-        // don't create a memory leak
-        delete arch;
+      // Link it in
+      if (LinkModules(M, aModule, ErrorMessage))
         return true;   // Couldn't link in the right object file...        
-      }
     }
 
     // We have linked in a set of modules determined by the archive to satisfy