[cfe-commits] [llvm-commits] r133708 strikes me again? - the case clang stalls

Cameron Zwarich zwarich at apple.com
Mon Aug 8 23:03:48 PDT 2011


Do you know why this only happens with MSVC++? We have had cases of infinite loops in the past caused by MSVC++ miscomputing code.

Cameron

On Aug 8, 2011, at 9:05 PM, NAKAMURA Takumi wrote:

> It seems BasicBlock::replaceSuccessorsPhiUsesWith() might not handle
> incomplete successors properly on msvc.
> 
> In a case I saw, the successor has no instructions.
> 
> John, would it be a possible case for CGCleanup to pass incomplete
> Entry Block to llvm?
> 
> Jay, would it be assumed?
> 
> Workaround is as below;
> 
> --- a/lib/VMCore/BasicBlock.cpp
> +++ b/lib/VMCore/BasicBlock.cpp
> @@ -336,7 +336,9 @@ void BasicBlock::replaceSuccessorsPhiUsesWith(BasicBlock *Ne
>     return;
>   for (unsigned i = 0, e = TI->getNumSuccessors(); i != e; ++i) {
>     BasicBlock *Succ = TI->getSuccessor(i);
> -    for (iterator II = Succ->begin(); PHINode *PN = dyn_cast<PHINode>(II);
> +    PHINode *PN;
> +    for (iterator II = Succ->begin(), IE = Succ->end();
> +        II != IE && (PN = dyn_cast<PHINode>(II)) != NULL;
>          ++II) {
>       int i;
>       while ((i = PN->getBasicBlockIndex(this)) >= 0)
> 
> 
> ...Takumi
> 
> 
> 2011年7月30日11:03 NAKAMURA Takumi <geek4civic at gmail.com>:
>> I have met infinite loop in clang since yesterday.
>> (r136404 had triggered the case for me but r136404 must be nothing)
>> 
>> Now I can reproduce the infinite loop "RelWithDebInfo" on visual studio 10.
>> (But it happens randomly)
>> Still I am investigating.
>> Lemme know whatever I should check up.
>> 
>> FYI, ...Takumi
>> 
>> The log is as below. Infinite loop in replaceSuccessorsPhiUsesWith().
>> 
>>>      clang.exe!llvm::PHINode::getBasicBlockIndex(const llvm::BasicBlock * BB)  行 2000        C++
>>       clang.exe!llvm::BasicBlock::replaceSuccessorsPhiUsesWith(llvm::BasicBlock
>> * New)  行 342 + 0x8 バイト C++
>>       clang.exe!llvm::Value::replaceAllUsesWith(llvm::Value * New)  行 310
>> + 0x8 バイト       C++
>>       clang.exe!SimplifyCleanupEntry(clang::CodeGen::CodeGenFunction &
>> CGF, llvm::BasicBlock * Entry)  行 426   C++
>>       clang.exe!clang::CodeGen::CodeGenFunction::PopCleanupBlock(bool
>> FallthroughIsBranchThrough)  行 845 + 0xc バイト    C++
>>       clang.exe!clang::CodeGen::CodeGenFunction::PopCleanupBlocks(clang::CodeGen::EHScopeStack::stable_iterator
>> Old)  行 372 + 0xb バイト   C++
>>       clang.exe!clang::CodeGen::CodeGenFunction::EmitCompoundStmt(const
>> clang::CompoundStmt & S, bool GetLast, clang::CodeGen::AggValueSlot
>> AggSlot)  行 231 + 0x1c バイト      C++
>>       clang.exe!clang::CodeGen::CodeGenFunction::EmitSimpleStmt(const
>> clang::Stmt * S)  行 183 C++
>>       clang.exe!clang::CodeGen::CodeGenFunction::EmitStmt(const
>> clang::Stmt * S)  行 48 + 0xb バイト        C++
>>       clang.exe!clang::CodeGen::CodeGenFunction::EmitFunctionBody(clang::CodeGen::FunctionArgList
>> & Args)  行 353 + 0xf バイト        C++
>>       clang.exe!clang::CodeGen::CodeGenFunction::GenerateCode(clang::GlobalDecl
>> GD, llvm::Function * Fn, const clang::CodeGen::CGFunctionInfo &
>> FnInfo)  行 407  C++
>>       clang.exe!clang::CodeGen::CodeGenModule::EmitGlobalFunctionDefinition(clang::GlobalDecl
>> GD)  行 1517 + 0x26 バイト  C++
>>       clang.exe!clang::CodeGen::CodeGenModule::EmitGlobalDefinition(clang::GlobalDecl
>> GD)  行 844      C++
>>       clang.exe!clang::CodeGen::CodeGenModule::EmitGlobal(clang::GlobalDecl
>> GD)  行 803      C++
>>       clang.exe!clang::CodeGen::CodeGenModule::EmitTopLevelDecl(clang::Decl
>> * D)  行 2214    C++
>>       clang.exe!`anonymous
>> namespace'::CodeGeneratorImpl::HandleTopLevelDecl(clang::DeclGroupRef
>> DG)  行 65 + 0xe バイト     C++
>>       clang.exe!clang::BackendConsumer::HandleTopLevelDecl(clang::DeclGroupRef
>> D)  行 92        C++
>>       clang.exe!clang::ParseAST(clang::Sema & S, bool PrintStats)  行 84       C++
>>       clang.exe!clang::ASTFrontendAction::ExecuteAction()  行 378 + 0x1a バイト   C++
>>       clang.exe!clang::CodeGenAction::ExecuteAction()  行 348  C++
>>       clang.exe!clang::FrontendAction::Execute()  行 299       C++
>>       clang.exe!clang::CompilerInstance::ExecuteAction(clang::FrontendAction
>> & Act)  行 615   C++
>>       clang.exe!clang::ExecuteCompilerInvocation(clang::CompilerInstance *
>> Clang)  行 172   C++
>>       clang.exe!cc1_main(const char * * ArgBegin, const char * * ArgEnd,
>> const char * Argv0, void * MainAddr)  行 159 + 0x6 バイト   C++
>>       clang.exe!main(int argc_, const char * * argv_)  行 354 + 0x15 バイト       C++
>> 
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits




More information about the cfe-commits mailing list