Author: eugenis
Date: Tue Mar 26 08:44:29 2013
New Revision: 178015

URL: http://llvm.org/viewvc/llvm-project?rev=178015&view=rev
Log:
Fix uninitialized read of CalleeWithThisReturn.

CalleeWithThisReturn can be left initialized if HasThisReturn() is false.
This change reverses the order of checks in EmitFunctionEpilog such that
CalleeWithThisReturn is only examined when it has a meaningful value.

Found with MemorySanitizer.

Modified:
    cfe/trunk/lib/CodeGen/CGCall.cpp

Modified: cfe/trunk/lib/CodeGen/CGCall.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGCall.cpp?rev=178015&r1=178014&r2=178015&view=diff
==============================================================================
--- cfe/trunk/lib/CodeGen/CGCall.cpp (original)
+++ cfe/trunk/lib/CodeGen/CGCall.cpp Tue Mar 26 08:44:29 2013
@@ -1722,7 +1722,7 @@ void CodeGenFunction::EmitFunctionEpilog
   // the same object as CXXThisValue, use the return value from the CallInst.
   // We will not need to keep 'this' alive through the callsite. It also 
enables
   // optimizations in the backend, such as tail call optimization.
-  if (CalleeWithThisReturn && CGM.getCXXABI().HasThisReturn(CurGD)) {
+  if (CGM.getCXXABI().HasThisReturn(CurGD) && CalleeWithThisReturn) {
     llvm::BasicBlock *IP = Builder.GetInsertBlock();
     llvm::CallInst *Callsite;
     if (!IP->empty() && (Callsite = dyn_cast<llvm::CallInst>(&IP->back())) &&


_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to