From: Steve Naroff Date: Thu, 23 Apr 2009 15:15:40 +0000 (+0000) Subject: Sema::ActOnStartClassInterface(): Use PushOnScopeChains(). X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=a7503a735d56473a67987880726f8bf731ee3463;p=clang Sema::ActOnStartClassInterface(): Use PushOnScopeChains(). This enables class recognition to work with PCH. I believe this means we can remove Sema::ObjCInterfaceDecls and it's usage within Sema::LookupName(). Will investigate. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@69891 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Frontend/PCHReader.cpp b/lib/Frontend/PCHReader.cpp index 0e2d06eaf3..0502a876a3 100644 --- a/lib/Frontend/PCHReader.cpp +++ b/lib/Frontend/PCHReader.cpp @@ -2742,7 +2742,7 @@ PCHReader::ReadDeclarationName(const RecordData &Record, unsigned &Idx) { case DeclarationName::ObjCZeroArgSelector: case DeclarationName::ObjCOneArgSelector: case DeclarationName::ObjCMultiArgSelector: - assert(false && "Unable to de-serialize Objective-C selectors"); + return DeclarationName(GetSelector(Record, Idx)); break; case DeclarationName::CXXConstructorName: diff --git a/lib/Sema/SemaDeclObjC.cpp b/lib/Sema/SemaDeclObjC.cpp index c65b1402be..7b23b04859 100644 --- a/lib/Sema/SemaDeclObjC.cpp +++ b/lib/Sema/SemaDeclObjC.cpp @@ -99,8 +99,7 @@ ActOnStartClassInterface(SourceLocation AtInterfaceLoc, ProcessDeclAttributeList(IDecl, AttrList); ObjCInterfaceDecls[ClassName] = IDecl; - // FIXME: PushOnScopeChains - CurContext->addDecl(Context, IDecl); + PushOnScopeChains(IDecl, TUScope); // Remember that this needs to be removed when the scope is popped. TUScope->AddDecl(DeclPtrTy::make(IDecl)); } diff --git a/test/PCH/objc_methods.m b/test/PCH/objc_methods.m index 77901c38d4..818c6145ed 100644 --- a/test/PCH/objc_methods.m +++ b/test/PCH/objc_methods.m @@ -1,11 +1,14 @@ // Test this without pch. -// FIXME: clang-cc -include %S/objc_methods.h -fsyntax-only -verify %s && +// RUN: clang-cc -include %S/objc_methods.h -fsyntax-only -verify %s && // Test with pch. -// FIXME: clang-cc -x=objective-c -emit-pch -o %t %S/objc_methods.h && -// FIXME: clang-cc -include-pch %t -fsyntax-only -verify %s +// RUN: clang-cc -x=objective-c -emit-pch -o %t %S/objc_methods.h && +// RUN: clang-cc -include-pch %t -fsyntax-only -verify %s void func() { - TestPCH *xx = [TestPCH alloc]; + TestPCH *xx; +#if 0 + xx = [TestPCH alloc]; [xx instMethod]; +#endif } diff --git a/test/SemaObjC/check-dup-objc-decls-1.m b/test/SemaObjC/check-dup-objc-decls-1.m index dc9c8f4426..1dfaf09050 100644 --- a/test/SemaObjC/check-dup-objc-decls-1.m +++ b/test/SemaObjC/check-dup-objc-decls-1.m @@ -18,9 +18,9 @@ typedef int OBJECT; // expected-note {{previous definition is here}} @class OBJECT ; // expected-error {{redefinition of 'OBJECT' as different kind of symbol}} -typedef int Gorf; // expected-note 2 {{previous definition is here}} +typedef int Gorf; // expected-note {{previous definition is here}} -@interface Gorf @end // expected-error {{redefinition of 'Gorf' as different kind of symbol}} +@interface Gorf @end // expected-error {{redefinition of 'Gorf' as different kind of symbol}} expected-note {{previous definition is here}} void Gorf() // expected-error {{redefinition of 'Gorf' as different kind of symbol}} {