From 3a21cd92f425680fcbfbab9552c0787b09ae9ca7 Mon Sep 17 00:00:00 2001 From: Fariborz Jahanian Date: Wed, 17 Feb 2010 17:00:07 +0000 Subject: [PATCH] Allow for declaration and use of ivars in a stand-alone implementation (toward radar 7547942). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@96479 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Sema/SemaDeclObjC.cpp | 6 ++++++ test/SemaObjC/stand-alone-implementation.m | 12 ++++++++++++ 2 files changed, 18 insertions(+) create mode 100644 test/SemaObjC/stand-alone-implementation.m diff --git a/lib/Sema/SemaDeclObjC.cpp b/lib/Sema/SemaDeclObjC.cpp index 1e9b56a90e..465c4a9ee1 100644 --- a/lib/Sema/SemaDeclObjC.cpp +++ b/lib/Sema/SemaDeclObjC.cpp @@ -823,6 +823,12 @@ void Sema::CheckImplementationIvars(ObjCImplementationDecl *ImpDecl, if (IDecl->isImplicitInterfaceDecl()) { IDecl->setIVarList(ivars, numIvars, Context); IDecl->setLocEnd(RBrace); + // Add ivar's to class's DeclContext. + for (unsigned i = 0, e = numIvars; i != e; ++i) { + ivars[i]->setLexicalDeclContext(IDecl); + IDecl->addDecl(ivars[i]); + } + return; } // If implementation has empty ivar list, just return. diff --git a/test/SemaObjC/stand-alone-implementation.m b/test/SemaObjC/stand-alone-implementation.m new file mode 100644 index 0000000000..c33b66a37b --- /dev/null +++ b/test/SemaObjC/stand-alone-implementation.m @@ -0,0 +1,12 @@ +// RUN: %clang_cc1 -fsyntax-only -verify %s +// radar 7547942 +// Allow injection of ivars into implementation's implicit class. + +@implementation INTFSTANDALONE // expected-warning {{cannot find interface declaration for 'INTFSTANDALONE'}} +{ + id IVAR1; + id IVAR2; +} +- (id) Meth { return IVAR1; } +@end + -- 2.40.0