forked from OSchip/llvm-project
[Objective-C modern translation]. Patch to fix type of
objc_msgSend's first argument to "Class" because objc_getClass is passed. rdar://20477025 llvm-svn: 234520
This commit is contained in:
parent
49286e9f4a
commit
f8e68e230b
|
@ -886,15 +886,15 @@ RewriteModernObjC::getIvarAccessString(ObjCIvarDecl *D) {
|
|||
FieldDecl *FD = FieldDecl::Create(*Context, nullptr, SourceLocation(),
|
||||
SourceLocation(),
|
||||
&Context->Idents.get(D->getNameAsString()),
|
||||
IvarT, nullptr,
|
||||
/*BitWidth=*/nullptr, /*Mutable=*/true,
|
||||
ICIS_NoInit);
|
||||
MemberExpr *ME = new (Context)
|
||||
MemberExpr(PE, true, SourceLocation(), FD, SourceLocation(),
|
||||
FD->getType(), VK_LValue, OK_Ordinary);
|
||||
IvarT = Context->getDecltypeType(ME, ME->getType());
|
||||
}
|
||||
}
|
||||
IvarT, nullptr,
|
||||
/*BitWidth=*/nullptr, /*Mutable=*/true,
|
||||
ICIS_NoInit);
|
||||
MemberExpr *ME = new (Context)
|
||||
MemberExpr(PE, true, SourceLocation(), FD, SourceLocation(),
|
||||
FD->getType(), VK_LValue, OK_Ordinary);
|
||||
IvarT = Context->getDecltypeType(ME, ME->getType());
|
||||
}
|
||||
}
|
||||
convertObjCTypeToCStyleType(IvarT);
|
||||
QualType castT = Context->getPointerType(IvarT);
|
||||
std::string TypeString(castT.getAsString(Context->getPrintingPolicy()));
|
||||
|
@ -2689,7 +2689,7 @@ Stmt *RewriteModernObjC::RewriteObjCBoxedExpr(ObjCBoxedExpr *Exp) {
|
|||
MsgExprs.push_back(subExpr);
|
||||
|
||||
SmallVector<QualType, 4> ArgTypes;
|
||||
ArgTypes.push_back(Context->getObjCIdType());
|
||||
ArgTypes.push_back(Context->getObjCClassType());
|
||||
ArgTypes.push_back(Context->getObjCSelType());
|
||||
for (const auto PI : BoxingMethod->parameters())
|
||||
ArgTypes.push_back(PI->getType());
|
||||
|
@ -2764,15 +2764,15 @@ Stmt *RewriteModernObjC::RewriteObjCArrayLiteralExpr(ObjCArrayLiteral *Exp) {
|
|||
FieldDecl *ARRFD = FieldDecl::Create(*Context, nullptr, SourceLocation(),
|
||||
SourceLocation(),
|
||||
&Context->Idents.get("arr"),
|
||||
Context->getPointerType(Context->VoidPtrTy),
|
||||
nullptr, /*BitWidth=*/nullptr,
|
||||
/*Mutable=*/true, ICIS_NoInit);
|
||||
MemberExpr *ArrayLiteralME = new (Context)
|
||||
MemberExpr(NSArrayCallExpr, false, SourceLocation(), ARRFD,
|
||||
SourceLocation(), ARRFD->getType(), VK_LValue, OK_Ordinary);
|
||||
QualType ConstIdT = Context->getObjCIdType().withConst();
|
||||
CStyleCastExpr * ArrayLiteralObjects =
|
||||
NoTypeInfoCStyleCastExpr(Context,
|
||||
Context->getPointerType(Context->VoidPtrTy),
|
||||
nullptr, /*BitWidth=*/nullptr,
|
||||
/*Mutable=*/true, ICIS_NoInit);
|
||||
MemberExpr *ArrayLiteralME = new (Context)
|
||||
MemberExpr(NSArrayCallExpr, false, SourceLocation(), ARRFD,
|
||||
SourceLocation(), ARRFD->getType(), VK_LValue, OK_Ordinary);
|
||||
QualType ConstIdT = Context->getObjCIdType().withConst();
|
||||
CStyleCastExpr * ArrayLiteralObjects =
|
||||
NoTypeInfoCStyleCastExpr(Context,
|
||||
Context->getPointerType(ConstIdT),
|
||||
CK_BitCast,
|
||||
ArrayLiteralME);
|
||||
|
@ -2816,7 +2816,7 @@ Stmt *RewriteModernObjC::RewriteObjCArrayLiteralExpr(ObjCArrayLiteral *Exp) {
|
|||
|
||||
|
||||
SmallVector<QualType, 4> ArgTypes;
|
||||
ArgTypes.push_back(Context->getObjCIdType());
|
||||
ArgTypes.push_back(Context->getObjCClassType());
|
||||
ArgTypes.push_back(Context->getObjCSelType());
|
||||
for (const auto *PI : ArrayMethod->params())
|
||||
ArgTypes.push_back(PI->getType());
|
||||
|
@ -2899,30 +2899,30 @@ Stmt *RewriteModernObjC::RewriteObjCDictionaryLiteralExpr(ObjCDictionaryLiteral
|
|||
FieldDecl *ARRFD = FieldDecl::Create(*Context, nullptr, SourceLocation(),
|
||||
SourceLocation(),
|
||||
&Context->Idents.get("arr"),
|
||||
Context->getPointerType(Context->VoidPtrTy),
|
||||
nullptr, /*BitWidth=*/nullptr,
|
||||
/*Mutable=*/true, ICIS_NoInit);
|
||||
MemberExpr *DictLiteralValueME = new (Context)
|
||||
MemberExpr(NSValueCallExpr, false, SourceLocation(), ARRFD,
|
||||
SourceLocation(), ARRFD->getType(), VK_LValue, OK_Ordinary);
|
||||
QualType ConstIdT = Context->getObjCIdType().withConst();
|
||||
CStyleCastExpr * DictValueObjects =
|
||||
NoTypeInfoCStyleCastExpr(Context,
|
||||
Context->getPointerType(Context->VoidPtrTy),
|
||||
nullptr, /*BitWidth=*/nullptr,
|
||||
/*Mutable=*/true, ICIS_NoInit);
|
||||
MemberExpr *DictLiteralValueME = new (Context)
|
||||
MemberExpr(NSValueCallExpr, false, SourceLocation(), ARRFD,
|
||||
SourceLocation(), ARRFD->getType(), VK_LValue, OK_Ordinary);
|
||||
QualType ConstIdT = Context->getObjCIdType().withConst();
|
||||
CStyleCastExpr * DictValueObjects =
|
||||
NoTypeInfoCStyleCastExpr(Context,
|
||||
Context->getPointerType(ConstIdT),
|
||||
CK_BitCast,
|
||||
DictLiteralValueME);
|
||||
// (const id <NSCopying> [])keys
|
||||
Expr *NSKeyCallExpr =
|
||||
new (Context) CallExpr(*Context, NSDictDRE, KeyExprs,
|
||||
NSDictFType, VK_LValue, SourceLocation());
|
||||
|
||||
MemberExpr *DictLiteralKeyME = new (Context)
|
||||
MemberExpr(NSKeyCallExpr, false, SourceLocation(), ARRFD,
|
||||
SourceLocation(), ARRFD->getType(), VK_LValue, OK_Ordinary);
|
||||
|
||||
CStyleCastExpr * DictKeyObjects =
|
||||
NoTypeInfoCStyleCastExpr(Context,
|
||||
Context->getPointerType(ConstIdT),
|
||||
Expr *NSKeyCallExpr =
|
||||
new (Context) CallExpr(*Context, NSDictDRE, KeyExprs,
|
||||
NSDictFType, VK_LValue, SourceLocation());
|
||||
|
||||
MemberExpr *DictLiteralKeyME = new (Context)
|
||||
MemberExpr(NSKeyCallExpr, false, SourceLocation(), ARRFD,
|
||||
SourceLocation(), ARRFD->getType(), VK_LValue, OK_Ordinary);
|
||||
|
||||
CStyleCastExpr * DictKeyObjects =
|
||||
NoTypeInfoCStyleCastExpr(Context,
|
||||
Context->getPointerType(ConstIdT),
|
||||
CK_BitCast,
|
||||
DictLiteralKeyME);
|
||||
|
||||
|
@ -2969,7 +2969,7 @@ Stmt *RewriteModernObjC::RewriteObjCDictionaryLiteralExpr(ObjCDictionaryLiteral
|
|||
|
||||
|
||||
SmallVector<QualType, 8> ArgTypes;
|
||||
ArgTypes.push_back(Context->getObjCIdType());
|
||||
ArgTypes.push_back(Context->getObjCClassType());
|
||||
ArgTypes.push_back(Context->getObjCSelType());
|
||||
for (const auto *PI : DictMethod->params()) {
|
||||
QualType T = PI->getType();
|
||||
|
@ -3225,15 +3225,15 @@ Expr *RewriteModernObjC::SynthMsgSendStretCallExpr(FunctionDecl *MsgSendStretFla
|
|||
FieldDecl *FieldD = FieldDecl::Create(*Context, nullptr, SourceLocation(),
|
||||
SourceLocation(),
|
||||
&Context->Idents.get("s"),
|
||||
returnType, nullptr,
|
||||
/*BitWidth=*/nullptr,
|
||||
/*Mutable=*/true, ICIS_NoInit);
|
||||
MemberExpr *ME = new (Context)
|
||||
MemberExpr(STCE, false, SourceLocation(), FieldD, SourceLocation(),
|
||||
FieldD->getType(), VK_LValue, OK_Ordinary);
|
||||
|
||||
return ME;
|
||||
}
|
||||
returnType, nullptr,
|
||||
/*BitWidth=*/nullptr,
|
||||
/*Mutable=*/true, ICIS_NoInit);
|
||||
MemberExpr *ME = new (Context)
|
||||
MemberExpr(STCE, false, SourceLocation(), FieldD, SourceLocation(),
|
||||
FieldD->getType(), VK_LValue, OK_Ordinary);
|
||||
|
||||
return ME;
|
||||
}
|
||||
|
||||
Stmt *RewriteModernObjC::SynthMessageExpr(ObjCMessageExpr *Exp,
|
||||
SourceLocation StartLoc,
|
||||
|
@ -4723,16 +4723,16 @@ Stmt *RewriteModernObjC::SynthesizeBlockCall(CallExpr *Exp, const Expr *BlockExp
|
|||
FieldDecl *FD = FieldDecl::Create(*Context, nullptr, SourceLocation(),
|
||||
SourceLocation(),
|
||||
&Context->Idents.get("FuncPtr"),
|
||||
Context->VoidPtrTy, nullptr,
|
||||
/*BitWidth=*/nullptr, /*Mutable=*/true,
|
||||
ICIS_NoInit);
|
||||
MemberExpr *ME =
|
||||
new (Context) MemberExpr(PE, true, SourceLocation(), FD, SourceLocation(),
|
||||
FD->getType(), VK_LValue, OK_Ordinary);
|
||||
|
||||
CastExpr *FunkCast = NoTypeInfoCStyleCastExpr(Context, PtrToFuncCastType,
|
||||
CK_BitCast, ME);
|
||||
PE = new (Context) ParenExpr(SourceLocation(), SourceLocation(), FunkCast);
|
||||
Context->VoidPtrTy, nullptr,
|
||||
/*BitWidth=*/nullptr, /*Mutable=*/true,
|
||||
ICIS_NoInit);
|
||||
MemberExpr *ME =
|
||||
new (Context) MemberExpr(PE, true, SourceLocation(), FD, SourceLocation(),
|
||||
FD->getType(), VK_LValue, OK_Ordinary);
|
||||
|
||||
CastExpr *FunkCast = NoTypeInfoCStyleCastExpr(Context, PtrToFuncCastType,
|
||||
CK_BitCast, ME);
|
||||
PE = new (Context) ParenExpr(SourceLocation(), SourceLocation(), FunkCast);
|
||||
|
||||
SmallVector<Expr*, 8> BlkExprs;
|
||||
// Add the implicit argument.
|
||||
|
@ -4771,26 +4771,26 @@ Stmt *RewriteModernObjC::RewriteBlockDeclRefExpr(DeclRefExpr *DeclRefExp) {
|
|||
FieldDecl *FD = FieldDecl::Create(*Context, nullptr, SourceLocation(),
|
||||
SourceLocation(),
|
||||
&Context->Idents.get("__forwarding"),
|
||||
Context->VoidPtrTy, nullptr,
|
||||
/*BitWidth=*/nullptr, /*Mutable=*/true,
|
||||
ICIS_NoInit);
|
||||
MemberExpr *ME = new (Context)
|
||||
MemberExpr(DeclRefExp, isArrow, SourceLocation(), FD, SourceLocation(),
|
||||
FD->getType(), VK_LValue, OK_Ordinary);
|
||||
|
||||
StringRef Name = VD->getName();
|
||||
FD = FieldDecl::Create(*Context, nullptr, SourceLocation(), SourceLocation(),
|
||||
Context->VoidPtrTy, nullptr,
|
||||
/*BitWidth=*/nullptr, /*Mutable=*/true,
|
||||
ICIS_NoInit);
|
||||
MemberExpr *ME = new (Context)
|
||||
MemberExpr(DeclRefExp, isArrow, SourceLocation(), FD, SourceLocation(),
|
||||
FD->getType(), VK_LValue, OK_Ordinary);
|
||||
|
||||
StringRef Name = VD->getName();
|
||||
FD = FieldDecl::Create(*Context, nullptr, SourceLocation(), SourceLocation(),
|
||||
&Context->Idents.get(Name),
|
||||
Context->VoidPtrTy, nullptr,
|
||||
/*BitWidth=*/nullptr, /*Mutable=*/true,
|
||||
ICIS_NoInit);
|
||||
ME =
|
||||
new (Context) MemberExpr(ME, true, SourceLocation(), FD, SourceLocation(),
|
||||
DeclRefExp->getType(), VK_LValue, OK_Ordinary);
|
||||
|
||||
// Need parens to enforce precedence.
|
||||
ParenExpr *PE = new (Context) ParenExpr(DeclRefExp->getExprLoc(),
|
||||
DeclRefExp->getExprLoc(),
|
||||
Context->VoidPtrTy, nullptr,
|
||||
/*BitWidth=*/nullptr, /*Mutable=*/true,
|
||||
ICIS_NoInit);
|
||||
ME =
|
||||
new (Context) MemberExpr(ME, true, SourceLocation(), FD, SourceLocation(),
|
||||
DeclRefExp->getType(), VK_LValue, OK_Ordinary);
|
||||
|
||||
// Need parens to enforce precedence.
|
||||
ParenExpr *PE = new (Context) ParenExpr(DeclRefExp->getExprLoc(),
|
||||
DeclRefExp->getExprLoc(),
|
||||
ME);
|
||||
ReplaceStmt(DeclRefExp, PE);
|
||||
return PE;
|
||||
|
@ -7682,15 +7682,15 @@ Stmt *RewriteModernObjC::RewriteObjCIvarRefExpr(ObjCIvarRefExpr *IV) {
|
|||
FieldDecl *FD = FieldDecl::Create(*Context, nullptr, SourceLocation(),
|
||||
SourceLocation(),
|
||||
&Context->Idents.get(D->getNameAsString()),
|
||||
IvarT, nullptr,
|
||||
/*BitWidth=*/nullptr,
|
||||
/*Mutable=*/true, ICIS_NoInit);
|
||||
MemberExpr *ME = new (Context)
|
||||
MemberExpr(PE, true, SourceLocation(), FD, SourceLocation(),
|
||||
FD->getType(), VK_LValue, OK_Ordinary);
|
||||
IvarT = Context->getDecltypeType(ME, ME->getType());
|
||||
}
|
||||
}
|
||||
IvarT, nullptr,
|
||||
/*BitWidth=*/nullptr,
|
||||
/*Mutable=*/true, ICIS_NoInit);
|
||||
MemberExpr *ME = new (Context)
|
||||
MemberExpr(PE, true, SourceLocation(), FD, SourceLocation(),
|
||||
FD->getType(), VK_LValue, OK_Ordinary);
|
||||
IvarT = Context->getDecltypeType(ME, ME->getType());
|
||||
}
|
||||
}
|
||||
convertObjCTypeToCStyleType(IvarT);
|
||||
QualType castT = Context->getPointerType(IvarT);
|
||||
|
||||
|
@ -7711,15 +7711,15 @@ Stmt *RewriteModernObjC::RewriteObjCIvarRefExpr(ObjCIvarRefExpr *IV) {
|
|||
FieldDecl *FD = FieldDecl::Create(*Context, nullptr, SourceLocation(),
|
||||
SourceLocation(),
|
||||
&Context->Idents.get(D->getNameAsString()),
|
||||
D->getType(), nullptr,
|
||||
/*BitWidth=*/D->getBitWidth(),
|
||||
/*Mutable=*/true, ICIS_NoInit);
|
||||
MemberExpr *ME = new (Context)
|
||||
MemberExpr(PE, /*isArrow*/ false, SourceLocation(), FD,
|
||||
SourceLocation(), FD->getType(), VK_LValue, OK_Ordinary);
|
||||
Replacement = ME;
|
||||
|
||||
}
|
||||
D->getType(), nullptr,
|
||||
/*BitWidth=*/D->getBitWidth(),
|
||||
/*Mutable=*/true, ICIS_NoInit);
|
||||
MemberExpr *ME = new (Context)
|
||||
MemberExpr(PE, /*isArrow*/ false, SourceLocation(), FD,
|
||||
SourceLocation(), FD->getType(), VK_LValue, OK_Ordinary);
|
||||
Replacement = ME;
|
||||
|
||||
}
|
||||
else
|
||||
Replacement = PE;
|
||||
}
|
||||
|
|
|
@ -61,12 +61,12 @@ int main(int argc, const char *argv[]) {
|
|||
NSString *duplicateString = @(strdup("Hello"));
|
||||
}
|
||||
|
||||
// CHECK: NSNumber *theLetterZ = ((NSNumber *(*)(id, SEL, char))(void *)objc_msgSend)(objc_getClass("NSNumber"), sel_registerName("numberWithChar:"), ('Z'));
|
||||
// CHECK: NSNumber *fortyTwo = ((NSNumber *(*)(id, SEL, int))(void *)objc_msgSend)(objc_getClass("NSNumber"), sel_registerName("numberWithInt:"), (42));
|
||||
// CHECK: NSNumber *fortyTwoUnsigned = ((NSNumber *(*)(id, SEL, unsigned int))(void *)objc_msgSend)(objc_getClass("NSNumber"), sel_registerName("numberWithUnsignedInt:"), (42U));
|
||||
// CHECK: NSNumber *fortyTwoLong = ((NSNumber *(*)(id, SEL, long))(void *)objc_msgSend)(objc_getClass("NSNumber"), sel_registerName("numberWithLong:"), (42L));
|
||||
// CHECK: NSNumber *fortyTwoLongLong = ((NSNumber *(*)(id, SEL, long long))(void *)objc_msgSend)(objc_getClass("NSNumber"), sel_registerName("numberWithLongLong:"), (42LL));
|
||||
// CHECK: NSNumber *piFloat = ((NSNumber *(*)(id, SEL, float))(void *)objc_msgSend)(objc_getClass("NSNumber"), sel_registerName("numberWithFloat:"), (3.14159274F));
|
||||
// CHECK: NSNumber *piDouble = ((NSNumber *(*)(id, SEL, double))(void *)objc_msgSend)(objc_getClass("NSNumber"), sel_registerName("numberWithDouble:"), (3.1415926535000001));
|
||||
// CHECK: NSNumber *nsb = ((NSNumber *(*)(id, SEL, BOOL))(void *)objc_msgSend)(objc_getClass("NSNumber"), sel_registerName("numberWithBool:"), (BOOL)(b));
|
||||
// CHECK: NSString *duplicateString = ((NSString *(*)(id, SEL, const char *))(void *)objc_msgSend)(objc_getClass("NSString"), sel_registerName("stringWithUTF8String:"), (const char *)(strdup("Hello")));
|
||||
// CHECK: NSNumber *theLetterZ = ((NSNumber *(*)(Class, SEL, char))(void *)objc_msgSend)(objc_getClass("NSNumber"), sel_registerName("numberWithChar:"), ('Z'));
|
||||
// CHECK: NSNumber *fortyTwo = ((NSNumber *(*)(Class, SEL, int))(void *)objc_msgSend)(objc_getClass("NSNumber"), sel_registerName("numberWithInt:"), (42));
|
||||
// CHECK: NSNumber *fortyTwoUnsigned = ((NSNumber *(*)(Class, SEL, unsigned int))(void *)objc_msgSend)(objc_getClass("NSNumber"), sel_registerName("numberWithUnsignedInt:"), (42U));
|
||||
// CHECK: NSNumber *fortyTwoLong = ((NSNumber *(*)(Class, SEL, long))(void *)objc_msgSend)(objc_getClass("NSNumber"), sel_registerName("numberWithLong:"), (42L));
|
||||
// CHECK: NSNumber *fortyTwoLongLong = ((NSNumber *(*)(Class, SEL, long long))(void *)objc_msgSend)(objc_getClass("NSNumber"), sel_registerName("numberWithLongLong:"), (42LL));
|
||||
// CHECK: NSNumber *piFloat = ((NSNumber *(*)(Class, SEL, float))(void *)objc_msgSend)(objc_getClass("NSNumber"), sel_registerName("numberWithFloat:"), (3.14159274F));
|
||||
// CHECK: NSNumber *piDouble = ((NSNumber *(*)(Class, SEL, double))(void *)objc_msgSend)(objc_getClass("NSNumber"), sel_registerName("numberWithDouble:"), (3.1415926535000001));
|
||||
// CHECK: NSNumber *nsb = ((NSNumber *(*)(Class, SEL, BOOL))(void *)objc_msgSend)(objc_getClass("NSNumber"), sel_registerName("numberWithBool:"), (BOOL)(b));
|
||||
// CHECK: NSString *duplicateString = ((NSString *(*)(Class, SEL, const char *))(void *)objc_msgSend)(objc_getClass("NSString"), sel_registerName("stringWithUTF8String:"), (const char *)(strdup("Hello")));
|
||||
|
|
|
@ -56,14 +56,14 @@ int main(int argc, const char *argv[]) {
|
|||
NSNumber *falseNumber = @false; // equivalent to [NSNumber numberWithBool:(BOOL)false]
|
||||
}
|
||||
|
||||
// CHECK: NSNumber *theLetterZ = ((NSNumber *(*)(id, SEL, char))(void *)objc_msgSend)(objc_getClass("NSNumber"), sel_registerName("numberWithChar:"), 'Z');
|
||||
// CHECK: NSNumber *fortyTwo = ((NSNumber *(*)(id, SEL, int))(void *)objc_msgSend)(objc_getClass("NSNumber"), sel_registerName("numberWithInt:"), 42);
|
||||
// CHECK: NSNumber *fortyTwoUnsigned = ((NSNumber *(*)(id, SEL, unsigned int))(void *)objc_msgSend)(objc_getClass("NSNumber"), sel_registerName("numberWithUnsignedInt:"), 42U);
|
||||
// CHECK: NSNumber *fortyTwoLong = ((NSNumber *(*)(id, SEL, long))(void *)objc_msgSend)(objc_getClass("NSNumber"), sel_registerName("numberWithLong:"), 42L);
|
||||
// CHECK: NSNumber *fortyTwoLongLong = ((NSNumber *(*)(id, SEL, long long))(void *)objc_msgSend)(objc_getClass("NSNumber"), sel_registerName("numberWithLongLong:"), 42LL);
|
||||
// CHECK: NSNumber *piFloat = ((NSNumber *(*)(id, SEL, float))(void *)objc_msgSend)(objc_getClass("NSNumber"), sel_registerName("numberWithFloat:"), 3.14159274F);
|
||||
// CHECK: NSNumber *piDouble = ((NSNumber *(*)(id, SEL, double))(void *)objc_msgSend)(objc_getClass("NSNumber"), sel_registerName("numberWithDouble:"), 3.1415926535000001);
|
||||
// CHECK: NSNumber *yesNumber = ((NSNumber *(*)(id, SEL, BOOL))(void *)objc_msgSend)(objc_getClass("NSNumber"), sel_registerName("numberWithBool:"), true);
|
||||
// CHECK: NSNumber *noNumber = ((NSNumber *(*)(id, SEL, BOOL))(void *)objc_msgSend)(objc_getClass("NSNumber"), sel_registerName("numberWithBool:"), false);
|
||||
// CHECK: NSNumber *trueNumber = ((NSNumber *(*)(id, SEL, BOOL))(void *)objc_msgSend)(objc_getClass("NSNumber"), sel_registerName("numberWithBool:"), true);
|
||||
// CHECK: NSNumber *falseNumber = ((NSNumber *(*)(id, SEL, BOOL))(void *)objc_msgSend)(objc_getClass("NSNumber"), sel_registerName("numberWithBool:"), false);
|
||||
// CHECK: NSNumber *theLetterZ = ((NSNumber *(*)(Class, SEL, char))(void *)objc_msgSend)(objc_getClass("NSNumber"), sel_registerName("numberWithChar:"), 'Z');
|
||||
// CHECK: NSNumber *fortyTwo = ((NSNumber *(*)(Class, SEL, int))(void *)objc_msgSend)(objc_getClass("NSNumber"), sel_registerName("numberWithInt:"), 42);
|
||||
// CHECK: NSNumber *fortyTwoUnsigned = ((NSNumber *(*)(Class, SEL, unsigned int))(void *)objc_msgSend)(objc_getClass("NSNumber"), sel_registerName("numberWithUnsignedInt:"), 42U);
|
||||
// CHECK: NSNumber *fortyTwoLong = ((NSNumber *(*)(Class, SEL, long))(void *)objc_msgSend)(objc_getClass("NSNumber"), sel_registerName("numberWithLong:"), 42L);
|
||||
// CHECK: NSNumber *fortyTwoLongLong = ((NSNumber *(*)(Class, SEL, long long))(void *)objc_msgSend)(objc_getClass("NSNumber"), sel_registerName("numberWithLongLong:"), 42LL);
|
||||
// CHECK: NSNumber *piFloat = ((NSNumber *(*)(Class, SEL, float))(void *)objc_msgSend)(objc_getClass("NSNumber"), sel_registerName("numberWithFloat:"), 3.14159274F);
|
||||
// CHECK: NSNumber *piDouble = ((NSNumber *(*)(Class, SEL, double))(void *)objc_msgSend)(objc_getClass("NSNumber"), sel_registerName("numberWithDouble:"), 3.1415926535000001);
|
||||
// CHECK: NSNumber *yesNumber = ((NSNumber *(*)(Class, SEL, BOOL))(void *)objc_msgSend)(objc_getClass("NSNumber"), sel_registerName("numberWithBool:"), true);
|
||||
// CHECK: NSNumber *noNumber = ((NSNumber *(*)(Class, SEL, BOOL))(void *)objc_msgSend)(objc_getClass("NSNumber"), sel_registerName("numberWithBool:"), false);
|
||||
// CHECK: NSNumber *trueNumber = ((NSNumber *(*)(Class, SEL, BOOL))(void *)objc_msgSend)(objc_getClass("NSNumber"), sel_registerName("numberWithBool:"), true);
|
||||
// CHECK: NSNumber *falseNumber = ((NSNumber *(*)(Class, SEL, BOOL))(void *)objc_msgSend)(objc_getClass("NSNumber"), sel_registerName("numberWithBool:"), false);
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
// RUN: %clang_cc1 -x objective-c++ -fms-extensions -rewrite-objc %s -o %t-rw.cpp
|
||||
// RUN: %clang_cc1 -fsyntax-only -Wno-address-of-temporary -D"id=void*" -D"SEL=void*" -D"__declspec(X)=" %t-rw.cpp
|
||||
// RUN: %clang_cc1 -fsyntax-only -Wno-address-of-temporary -D"Class=void*" -D"id=void*" -D"SEL=void*" -D"__declspec(X)=" %t-rw.cpp
|
||||
// rdar://10803676
|
||||
|
||||
extern "C" void *sel_registerName(const char *);
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
// RUN: %clang_cc1 -x objective-c++ -fms-extensions -rewrite-objc %s -o %t-rw.cpp
|
||||
// RUN: %clang_cc1 -fsyntax-only -Wno-address-of-temporary -D"id=void*" -D"SEL=void*" -D"__declspec(X)=" %t-rw.cpp
|
||||
// RUN: %clang_cc1 -fsyntax-only -Wno-address-of-temporary -D"Class=void*" -D"id=void*" -D"SEL=void*" -D"__declspec(X)=" %t-rw.cpp
|
||||
// rdar://10803676
|
||||
|
||||
void *sel_registerName(const char *);
|
||||
|
|
Loading…
Reference in New Issue