diff options
author | Fariborz Jahanian <fjahanian@apple.com> | 2012-05-08 20:55:55 +0000 |
---|---|---|
committer | Fariborz Jahanian <fjahanian@apple.com> | 2012-05-08 20:55:55 +0000 |
commit | 20e181a3ece8862dcfcfacf70763074ddec5a68b (patch) | |
tree | 58c31a3fcdce836627cfa65193d251afb717b8c2 | |
parent | a135f2ca67172940dd1dd9414f17b9397e4517ef (diff) |
modern objc translation. objc_getClass() and objc_getMetaClass()
prototypes should both return `struct objc_class *`.
// rdar://11375495
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@156418 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Rewrite/RewriteModernObjC.cpp | 31 | ||||
-rw-r--r-- | test/Rewriter/objc-modern-getclass-proto.mm | 10 |
2 files changed, 24 insertions, 17 deletions
diff --git a/lib/Rewrite/RewriteModernObjC.cpp b/lib/Rewrite/RewriteModernObjC.cpp index b273871c2b..979326cad1 100644 --- a/lib/Rewrite/RewriteModernObjC.cpp +++ b/lib/Rewrite/RewriteModernObjC.cpp @@ -2399,12 +2399,12 @@ void RewriteModernObjC::SynthMsgSendFpretFunctionDecl() { SC_None, false); } -// SynthGetClassFunctionDecl - id objc_getClass(const char *name); +// SynthGetClassFunctionDecl - Class objc_getClass(const char *name); void RewriteModernObjC::SynthGetClassFunctionDecl() { IdentifierInfo *getClassIdent = &Context->Idents.get("objc_getClass"); SmallVector<QualType, 16> ArgTys; ArgTys.push_back(Context->getPointerType(Context->CharTy.withConst())); - QualType getClassType = getSimpleFunctionType(Context->getObjCIdType(), + QualType getClassType = getSimpleFunctionType(Context->getObjCClassType(), &ArgTys[0], ArgTys.size()); GetClassFunctionDecl = FunctionDecl::Create(*Context, TUDecl, SourceLocation(), @@ -2432,12 +2432,12 @@ void RewriteModernObjC::SynthGetSuperClassFunctionDecl() { false); } -// SynthGetMetaClassFunctionDecl - id objc_getMetaClass(const char *name); +// SynthGetMetaClassFunctionDecl - Class objc_getMetaClass(const char *name); void RewriteModernObjC::SynthGetMetaClassFunctionDecl() { IdentifierInfo *getClassIdent = &Context->Idents.get("objc_getMetaClass"); SmallVector<QualType, 16> ArgTys; ArgTys.push_back(Context->getPointerType(Context->CharTy.withConst())); - QualType getClassType = getSimpleFunctionType(Context->getObjCIdType(), + QualType getClassType = getSimpleFunctionType(Context->getObjCClassType(), &ArgTys[0], ArgTys.size()); GetMetaClassFunctionDecl = FunctionDecl::Create(*Context, TUDecl, SourceLocation(), @@ -3048,17 +3048,14 @@ Stmt *RewriteModernObjC::SynthMessageExpr(ObjCMessageExpr *Exp, ClassDecl->getIdentifier()->getName(), StringLiteral::Ascii, false, argType, SourceLocation())); + // (Class)objc_getClass("CurrentClass") CallExpr *Cls = SynthesizeCallToFunctionDecl(GetMetaClassFunctionDecl, &ClsExprs[0], ClsExprs.size(), StartLoc, EndLoc); - // (Class)objc_getClass("CurrentClass") - CastExpr *ArgExpr = NoTypeInfoCStyleCastExpr(Context, - Context->getObjCClassType(), - CK_BitCast, Cls); ClsExprs.clear(); - ClsExprs.push_back(ArgExpr); + ClsExprs.push_back(Cls); Cls = SynthesizeCallToFunctionDecl(GetSuperClassFunctionDecl, &ClsExprs[0], ClsExprs.size(), StartLoc, EndLoc); @@ -3131,7 +3128,10 @@ Stmt *RewriteModernObjC::SynthMessageExpr(ObjCMessageExpr *Exp, &ClsExprs[0], ClsExprs.size(), StartLoc, EndLoc); - MsgExprs.push_back(Cls); + CastExpr *ArgExpr = NoTypeInfoCStyleCastExpr(Context, + Context->getObjCIdType(), + CK_BitCast, Cls); + MsgExprs.push_back(ArgExpr); break; } @@ -3159,16 +3159,13 @@ Stmt *RewriteModernObjC::SynthMessageExpr(ObjCMessageExpr *Exp, ClassDecl->getIdentifier()->getName(), StringLiteral::Ascii, false, argType, SourceLocation())); + // (Class)objc_getClass("CurrentClass") CallExpr *Cls = SynthesizeCallToFunctionDecl(GetClassFunctionDecl, &ClsExprs[0], ClsExprs.size(), StartLoc, EndLoc); - // (Class)objc_getClass("CurrentClass") - CastExpr *ArgExpr = NoTypeInfoCStyleCastExpr(Context, - Context->getObjCClassType(), - CK_BitCast, Cls); ClsExprs.clear(); - ClsExprs.push_back(ArgExpr); + ClsExprs.push_back(Cls); Cls = SynthesizeCallToFunctionDecl(GetSuperClassFunctionDecl, &ClsExprs[0], ClsExprs.size(), StartLoc, EndLoc); @@ -5743,11 +5740,11 @@ void RewriteModernObjC::Initialize(ASTContext &context) { Preamble += "__OBJC_RW_DLLIMPORT void objc_msgSendSuper_stret(void);\n"; Preamble += "__OBJC_RW_DLLIMPORT void objc_msgSend_fpret(void);\n"; - Preamble += "__OBJC_RW_DLLIMPORT struct objc_object *objc_getClass"; + Preamble += "__OBJC_RW_DLLIMPORT struct objc_class *objc_getClass"; Preamble += "(const char *);\n"; Preamble += "__OBJC_RW_DLLIMPORT struct objc_class *class_getSuperclass"; Preamble += "(struct objc_class *);\n"; - Preamble += "__OBJC_RW_DLLIMPORT struct objc_object *objc_getMetaClass"; + Preamble += "__OBJC_RW_DLLIMPORT struct objc_class *objc_getMetaClass"; Preamble += "(const char *);\n"; Preamble += "__OBJC_RW_DLLIMPORT void objc_exception_throw( struct objc_object *);\n"; // @synchronized hooks. diff --git a/test/Rewriter/objc-modern-getclass-proto.mm b/test/Rewriter/objc-modern-getclass-proto.mm new file mode 100644 index 0000000000..48e5fc9dcc --- /dev/null +++ b/test/Rewriter/objc-modern-getclass-proto.mm @@ -0,0 +1,10 @@ +// RUN: %clang_cc1 -E %s -o %t.mm +// RUN: %clang_cc1 -x objective-c++ -fblocks -fms-extensions -rewrite-objc -fobjc-fragile-abi %t.mm -o %t-rw.cpp +// rdar://11375495 + +@interface I @end +@implementation I @end + +// CHECK: __OBJC_RW_DLLIMPORT struct objc_class *objc_getClass(const char *); +// CHECK: __OBJC_RW_DLLIMPORT struct objc_class *objc_getMetaClass(const char *); + |