[llvm-commits] CVS: llvm/lib/Bytecode/Reader/Reader.cpp ReaderWrappers.cpp

Reid Spencer reid at x10sys.com
Fri Dec 15 11:49:38 PST 2006



Changes in directory llvm/lib/Bytecode/Reader:

Reader.cpp updated: 1.213 -> 1.214
ReaderWrappers.cpp updated: 1.59 -> 1.60
---
Log message:

Fix long standing issue with propagating error message back to caller. This
has been a problem since exceptions were removed from the BytecodeReader.
Error messages are now captured from ModuleProvider::releaseModule as well
as after a longjmp.


---
Diffs of the changes:  (+17 -7)

 Reader.cpp         |   14 ++++++++++++--
 ReaderWrappers.cpp |   10 +++++-----
 2 files changed, 17 insertions(+), 7 deletions(-)


Index: llvm/lib/Bytecode/Reader/Reader.cpp
diff -u llvm/lib/Bytecode/Reader/Reader.cpp:1.213 llvm/lib/Bytecode/Reader/Reader.cpp:1.214
--- llvm/lib/Bytecode/Reader/Reader.cpp:1.213	Mon Dec 11 17:20:20 2006
+++ llvm/lib/Bytecode/Reader/Reader.cpp	Fri Dec 15 13:49:23 2006
@@ -1758,8 +1758,13 @@
 /// @see ParseBytecode
 bool BytecodeReader::ParseFunction(Function* Func, std::string* ErrMsg) {
 
-  if (setjmp(context))
+  if (setjmp(context)) {
+    // Set caller's error message, if requested
+    if (ErrMsg)
+      *ErrMsg = ErrorMsg;
+    // Indicate an error occurred
     return true;
+  }
 
   // Find {start, end} pointers and slot in the map. If not there, we're done.
   LazyFunctionMap::iterator Fi = LazyFunctionLoadMap.find(Func);
@@ -1788,8 +1793,13 @@
 /// to materialize the functions.
 /// @see ParseBytecode
 bool BytecodeReader::ParseAllFunctionBodies(std::string* ErrMsg) {
-  if (setjmp(context))
+  if (setjmp(context)) {
+    // Set caller's error message, if requested
+    if (ErrMsg)
+      *ErrMsg = ErrorMsg;
+    // Indicate an error occurred
     return true;
+  }
 
   LazyFunctionMap::iterator Fi = LazyFunctionLoadMap.begin();
   LazyFunctionMap::iterator Fe = LazyFunctionLoadMap.end();


Index: llvm/lib/Bytecode/Reader/ReaderWrappers.cpp
diff -u llvm/lib/Bytecode/Reader/ReaderWrappers.cpp:1.59 llvm/lib/Bytecode/Reader/ReaderWrappers.cpp:1.60
--- llvm/lib/Bytecode/Reader/ReaderWrappers.cpp:1.59	Thu Dec  7 14:28:15 2006
+++ llvm/lib/Bytecode/Reader/ReaderWrappers.cpp	Fri Dec 15 13:49:23 2006
@@ -309,7 +309,7 @@
   ModuleProvider *MP = 
     getBytecodeBufferModuleProvider(Buffer, Length, ModuleID, ErrMsg, 0);
   if (!MP) return 0;
-  Module *M = MP->releaseModule();
+  Module *M = MP->releaseModule(ErrMsg);
   delete MP;
   return M;
 }
@@ -341,7 +341,7 @@
                                 std::string *ErrMsg) {
   ModuleProvider* MP = getBytecodeModuleProvider(Filename, ErrMsg);
   if (!MP) return 0;
-  Module *M = MP->releaseModule();
+  Module *M = MP->releaseModule(ErrMsg);
   delete MP;
   return M;
 }
@@ -356,7 +356,7 @@
   BytecodeHandler* AH = createBytecodeAnalyzerHandler(bca,output);
   ModuleProvider* MP = getBytecodeModuleProvider(Filename, ErrMsg, AH);
   if (!MP) return 0;
-  Module *M = MP->releaseModule();
+  Module *M = MP->releaseModule(ErrMsg);
   delete MP;
   return M;
 }
@@ -375,7 +375,7 @@
   ModuleProvider* MP = 
     getBytecodeBufferModuleProvider(Buffer, Length, ModuleID, ErrMsg, hdlr);
   if (!MP) return 0;
-  Module *M = MP->releaseModule();
+  Module *M = MP->releaseModule(ErrMsg);
   delete MP;
   return M;
 }
@@ -388,7 +388,7 @@
     deplibs.clear();
     return true;
   }
-  Module* M = MP->releaseModule();
+  Module* M = MP->releaseModule(ErrMsg);
   deplibs = M->getLibraries();
   delete M;
   delete MP;






More information about the llvm-commits mailing list