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.

llvm-svn: 178015
This commit is contained in:
Evgeniy Stepanov
2013-03-26 13:44:29 +00:00
parent 56a784d2f6
commit 2e7d6cd0ec

View File

@@ -1722,7 +1722,7 @@ void CodeGenFunction::EmitFunctionEpilog(const CGFunctionInfo &FI) {
// 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())) &&