diff --git a/clang/Sema/SemaDecl.cpp b/clang/Sema/SemaDecl.cpp index f4717ce66b42..c23ed69b1b57 100644 --- a/clang/Sema/SemaDecl.cpp +++ b/clang/Sema/SemaDecl.cpp @@ -1193,6 +1193,15 @@ Sema::DeclTy *Sema::ActOnStartCategoryImplementation( /// Check that class of this category is already completely declared. if (!IDecl || IDecl->isForwardDecl()) Diag(ClassLoc, diag::err_undef_interface, ClassName->getName()); + + // We cannot build type 'id' laziliy. It is needed when checking if a + // type is an 'id' (via call to isObjcIdType) even if there is no + // need for the dafult 'id' type. + // FIXME: Depending on the need to compare to 'id', this may have to go + // somewhere else. At this time, this is a good enough place to do type + // encoding of methods and ivars for the rewrite client. + GetObjcIdType(AtCatImplLoc); + /// TODO: Check that CatName, category name, is not used in another // implementation. return CDecl; @@ -1261,7 +1270,15 @@ Sema::DeclTy *Sema::ActOnStartClassImplementation( // Check that there is no duplicate implementation of this class. if (!ObjcImplementations.insert(ClassName)) Diag(ClassLoc, diag::err_dup_implementation_class, ClassName->getName()); - + + // We cannot build type 'id' laziliy. It is needed when checking if a + // type is an 'id' (via call to isObjcIdType) even if there is no + // need for the dafult 'id' type. + // FIXME: Depending on the need to compare to 'id', this may have to go + // somewhere else. At this time, this is a good enough place to do type + // encoding of methods and ivars for the rewrite client. + GetObjcIdType(AtClassImplLoc); + return IMPDecl; } @@ -1964,14 +1981,6 @@ Sema::DeclTy *Sema::ActOnMethodDeclaration( AttributeList *AttrList, tok::ObjCKeywordKind MethodDeclKind) { llvm::SmallVector Params; - // We cannot build type 'id' laziliy. It is needed when checking if a - // type is an 'id' (via call to isObjcIdType) even if there is no - // need for the dafult 'id' type. - // FIXME: Depending on the need to compare to 'id', this may have to go - // somewhere else. At this time, this is a good enough place to do type - // encoding of methods and ivars for the rewrite client. - GetObjcIdType(MethodLoc); - for (unsigned i = 0; i < Sel.getNumArgs(); i++) { // FIXME: arg->AttrList must be stored too! QualType argType; diff --git a/clang/test/Sema/ivar-encoding-1.m b/clang/test/Sema/ivar-encoding-1.m new file mode 100644 index 000000000000..1f7812fadf0a --- /dev/null +++ b/clang/test/Sema/ivar-encoding-1.m @@ -0,0 +1,15 @@ +// RUN: clang -rewrite-test -verify %s + +@interface Intf +{ + id ivar; + id ivar1[12]; + + id **ivar3; + + id (*ivar4) (id, id); +} +@end + +@implementation Intf +@end