[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