Revisited my last patch to be able to do encoding of ivar types with 'id'.
llvm-svn: 43507
This commit is contained in:
parent
74a0ae2c2a
commit
18d7b30241
|
@ -1193,6 +1193,15 @@ Sema::DeclTy *Sema::ActOnStartCategoryImplementation(
|
||||||
/// Check that class of this category is already completely declared.
|
/// Check that class of this category is already completely declared.
|
||||||
if (!IDecl || IDecl->isForwardDecl())
|
if (!IDecl || IDecl->isForwardDecl())
|
||||||
Diag(ClassLoc, diag::err_undef_interface, ClassName->getName());
|
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
|
/// TODO: Check that CatName, category name, is not used in another
|
||||||
// implementation.
|
// implementation.
|
||||||
return CDecl;
|
return CDecl;
|
||||||
|
@ -1261,7 +1270,15 @@ Sema::DeclTy *Sema::ActOnStartClassImplementation(
|
||||||
// Check that there is no duplicate implementation of this class.
|
// Check that there is no duplicate implementation of this class.
|
||||||
if (!ObjcImplementations.insert(ClassName))
|
if (!ObjcImplementations.insert(ClassName))
|
||||||
Diag(ClassLoc, diag::err_dup_implementation_class, ClassName->getName());
|
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;
|
return IMPDecl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1964,14 +1981,6 @@ Sema::DeclTy *Sema::ActOnMethodDeclaration(
|
||||||
AttributeList *AttrList, tok::ObjCKeywordKind MethodDeclKind) {
|
AttributeList *AttrList, tok::ObjCKeywordKind MethodDeclKind) {
|
||||||
llvm::SmallVector<ParmVarDecl*, 16> Params;
|
llvm::SmallVector<ParmVarDecl*, 16> 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++) {
|
for (unsigned i = 0; i < Sel.getNumArgs(); i++) {
|
||||||
// FIXME: arg->AttrList must be stored too!
|
// FIXME: arg->AttrList must be stored too!
|
||||||
QualType argType;
|
QualType argType;
|
||||||
|
|
|
@ -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
|
Loading…
Reference in New Issue