Does this bring us closer to fixing PR19061? http://llvm.org/bugs/show_bug.cgi?id=19061
On Aug 18, 2014, at 12:32 , Ben Langmuir <[email protected]> wrote: > Author: benlangmuir > Date: Mon Aug 18 14:32:45 2014 > New Revision: 215929 > > URL: http://llvm.org/viewvc/llvm-project?rev=215929&view=rev > Log: > 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. > > Added: > cfe/trunk/test/Index/Inputs/declare-objc-predef.h > cfe/trunk/test/Index/reparse-predef-objc-protocol.m > Modified: > cfe/trunk/lib/Serialization/ASTReaderDecl.cpp > > Modified: cfe/trunk/lib/Serialization/ASTReaderDecl.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/ASTReaderDecl.cpp?rev=215929&r1=215928&r2=215929&view=diff > ============================================================================== > --- cfe/trunk/lib/Serialization/ASTReaderDecl.cpp (original) > +++ cfe/trunk/lib/Serialization/ASTReaderDecl.cpp Mon Aug 18 14:32:45 2014 > @@ -2019,6 +2019,8 @@ void ASTDeclReader::mergeRedeclarable(Re > 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 > > Added: cfe/trunk/test/Index/Inputs/declare-objc-predef.h > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Index/Inputs/declare-objc-predef.h?rev=215929&view=auto > ============================================================================== > --- cfe/trunk/test/Index/Inputs/declare-objc-predef.h (added) > +++ cfe/trunk/test/Index/Inputs/declare-objc-predef.h Mon Aug 18 14:32:45 2014 > @@ -0,0 +1,3 @@ > +@class Protocol; > +typedef struct objc_class *Class > +@class id; > > Added: cfe/trunk/test/Index/reparse-predef-objc-protocol.m > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Index/reparse-predef-objc-protocol.m?rev=215929&view=auto > ============================================================================== > --- cfe/trunk/test/Index/reparse-predef-objc-protocol.m (added) > +++ cfe/trunk/test/Index/reparse-predef-objc-protocol.m Mon Aug 18 14:32:45 > 2014 > @@ -0,0 +1,9 @@ > +// RUN: env CINDEXTEST_EDITING=1 c-index-test -test-load-source-reparse 3 > local %s -I %S/Inputs > +#import "declare-objc-predef.h" > +// PR20633 > + > +// CHECK: declare-objc-predef.h:1:8: ObjCInterfaceDecl=Protocol:1:8 > Extent=[1:1 - 1:16] > +// CHECK: declare-objc-predef.h:1:8: ObjCClassRef=Protocol:1:8 Extent=[1:8 - > 1:16] > +// CHECK: declare-objc-predef.h:2:16: StructDecl=objc_class:2:16 Extent=[2:9 > - 2:26] > +// CHECK: declare-objc-predef.h:2:28: TypedefDecl=Class:2:28 (Definition) > Extent=[2:1 - 2:33] > +// CHECK: declare-objc-predef.h:2:16: TypeRef=struct objc_class:2:16 > Extent=[2:16 - 2:26] > > > _______________________________________________ > cfe-commits mailing list > [email protected] > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
