diff options
author | Ben Langmuir <blangmuir@apple.com> | 2014-08-18 19:32:45 +0000 |
---|---|---|
committer | Ben Langmuir <blangmuir@apple.com> | 2014-08-18 19:32:45 +0000 |
commit | e13fd1c43056f2d39651d0a3839231d335ce14e9 (patch) | |
tree | e90a7a38584ad218751b94ac9f716495610e9149 /clang/lib/Serialization/ASTReaderDecl.cpp | |
parent | 5cd06f26ae9f91541d9453bf0725505bcddee913 (diff) | |
download | bcm5719-llvm-e13fd1c43056f2d39651d0a3839231d335ce14e9.tar.gz bcm5719-llvm-e13fd1c43056f2d39651d0a3839231d335ce14e9.zip |
Fix the rececl chain for redeclarations of predefined decls
Predefined decls like 'Protocol' in objc are not loaded from AST files,
so we cannot rely on loading the canonical decl to complete the redecl
chain for redeclarations of these decls. The broken redecl chain was
non-circular, so looping over redecls() would hang.
llvm-svn: 215929
Diffstat (limited to 'clang/lib/Serialization/ASTReaderDecl.cpp')
-rw-r--r-- | clang/lib/Serialization/ASTReaderDecl.cpp | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/clang/lib/Serialization/ASTReaderDecl.cpp b/clang/lib/Serialization/ASTReaderDecl.cpp index 05d3bab9a7d..3e24145075e 100644 --- a/clang/lib/Serialization/ASTReaderDecl.cpp +++ b/clang/lib/Serialization/ASTReaderDecl.cpp @@ -2019,6 +2019,8 @@ void ASTDeclReader::mergeRedeclarable(Redeclarable<T> *DBase, T *D = static_cast<T*>(DBase); T *DCanon = D->getCanonicalDecl(); if (D != DCanon && + // IDs < NUM_PREDEF_DECL_IDS are not loaded from an AST file. + Redecl.getFirstID() >= NUM_PREDEF_DECL_IDS && (!Reader.getContext().getLangOpts().Modules || Reader.getOwningModuleFile(DCanon) == Reader.getOwningModuleFile(D))) { // All redeclarations between this declaration and its originally-canonical |