[LLVMbugs] [Bug 21323] New: FindExternalVisibleDeclsByName iterator invalidation when using modules

bugzilla-daemon at llvm.org bugzilla-daemon at llvm.org
Mon Oct 20 22:36:23 PDT 2014


http://llvm.org/bugs/show_bug.cgi?id=21323

            Bug ID: 21323
           Summary: FindExternalVisibleDeclsByName iterator invalidation
                    when using modules
           Product: clang
           Version: trunk
          Hardware: Macintosh
                OS: MacOS X
            Status: NEW
          Severity: normal
          Priority: P
         Component: Frontend
          Assignee: unassignedclangbugs at nondot.org
          Reporter: comexk at gmail.com
                CC: llvmbugs at cs.uiuc.edu
    Classification: Unclassified

In ASTReader::FindExternalVisibleDeclsByName, in the loop 'for (auto *MergedDC
: Merged->second)', it is possible for Merged to change, with the following
stack trace:

  * frame #0: 0x000000010018db10
clang`clang::ASTDeclReader::MergeDefinitionData(clang::CXXRecordDecl*,
clang::CXXRecordDecl::DefinitionData&)
    frame #1: 0x000000010018eb00
clang`clang::ASTDeclReader::VisitCXXRecordDeclImpl(clang::CXXRecordDecl*) + 560
    frame #2: 0x0000000100197e58
clang`clang::declvisitor::Base<clang::declvisitor::make_ptr,
clang::ASTDeclReader, void>::Visit(clang::Decl*) + 1016
    frame #3: 0x0000000100178f55
clang`clang::ASTDeclReader::Visit(clang::Decl*) + 21
    frame #4: 0x0000000100194934
clang`clang::ASTReader::ReadDeclRecord(unsigned int) + 1988
    frame #5: 0x000000010016b0d8 clang`clang::RecordDecl*
clang::ASTReader::ReadDeclAs<clang::RecordDecl>(clang::serialization::ModuleFile&,
llvm::SmallVector<unsigned long long, 64u> const&, unsigned int&) + 88
    frame #6: 0x000000010015513a
clang`clang::ASTReader::readTypeRecord(unsigned int) + 3114
    frame #7: 0x000000010014fe63 clang`clang::ASTReader::GetType(unsigned int)
+ 147
    frame #8: 0x00000001001579f4
clang`clang::ASTReader::readTypeRecord(unsigned int) + 13540
    frame #9: 0x000000010014fe63 clang`clang::ASTReader::GetType(unsigned int)
+ 147
    frame #10: 0x000000010015710a
clang`clang::ASTReader::readTypeRecord(unsigned int) + 11258
    frame #11: 0x000000010014fe63 clang`clang::ASTReader::GetType(unsigned int)
+ 147
    frame #12: 0x00000001001873b5
clang`clang::ASTDeclReader::VisitValueDecl(clang::ValueDecl*) + 149
    frame #13: 0x0000000100187515
clang`clang::ASTDeclReader::VisitDeclaratorDecl(clang::DeclaratorDecl*) + 21
    frame #14: 0x00000001001876a0
clang`clang::ASTDeclReader::VisitFunctionDecl(clang::FunctionDecl*) + 80
    frame #15: 0x000000010018ed46
clang`clang::ASTDeclReader::VisitCXXMethodDecl(clang::CXXMethodDecl*) + 22
    frame #16: 0x0000000100178f55
clang`clang::ASTDeclReader::Visit(clang::Decl*) + 21
    frame #17: 0x0000000100194934
clang`clang::ASTReader::ReadDeclRecord(unsigned int) + 1988
    frame #18: 0x0000000100176a29
clang`clang::ASTReader::GetLocalDecl(clang::serialization::ModuleFile&,
unsigned int) + 201
    frame #19: 0x00000001001698a0 clang`(anonymous
namespace)::DeclContextNameLookupVisitor::visit(clang::serialization::ModuleFile&,
void*) + 336
    frame #20: 0x0000000100228611
clang`clang::serialization::ModuleManager::visit(bool
(*)(clang::serialization::ModuleFile&, void*), void*,
llvm::SmallPtrSetImpl<clang::serialization::ModuleFile*>*) + 1297
    frame #21: 0x000000010015e3d8
clang`clang::ASTReader::FindExternalVisibleDeclsByName(clang::DeclContext
const*, clang::DeclarationName) + 2232
    frame #22: 0x0000000100ea18a7
clang`clang::DeclContext::lookup(clang::DeclarationName) + 999
    frame #23: 0x0000000100e12fb9
clang`clang::Redeclarable<clang::FunctionDecl>::DeclLink::getNext(clang::FunctionDecl
const*) const + 169
    frame #24: 0x000000010038423c
clang`clang::CodeGen::CodeGenModule::Release() + 972
    frame #25: 0x0000000100377ac4
clang`clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) + 100
    frame #26: 0x000000010040ee84 clang`clang::ParseAST(clang::Sema&, bool,
bool) + 468
    frame #27: 0x000000010037663b clang`clang::CodeGenAction::ExecuteAction() +
123
    frame #28: 0x000000010007c993 clang`clang::FrontendAction::Execute() + 67
    frame #29: 0x000000010004f19c
clang`clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) + 972
    frame #30: 0x000000010000a8c5
clang`clang::ExecuteCompilerInvocation(clang::CompilerInstance*) + 4149

This causes a crash.  Test case is hairy for now, though...

-- 
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20141021/213ef03a/attachment.html>


More information about the llvm-bugs mailing list