зеркало из https://github.com/microsoft/clang.git
Fix objc rewriting bug casting to qualified objective-c pointetr.
// rdar://9056351 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@126536 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
baac58d1a6
Коммит
dff3f018e0
|
@ -2988,9 +2988,9 @@ Stmt *RewriteObjC::SynthMessageExpr(ObjCMessageExpr *Exp,
|
|||
// Make all implicit casts explicit...ICE comes in handy:-)
|
||||
if (ImplicitCastExpr *ICE = dyn_cast<ImplicitCastExpr>(userExpr)) {
|
||||
// Reuse the ICE type, it is exactly what the doctor ordered.
|
||||
QualType type = ICE->getType()->isObjCQualifiedIdType()
|
||||
? Context->getObjCIdType()
|
||||
: ICE->getType();
|
||||
QualType type = ICE->getType();
|
||||
if (needToScanForQualifiers(type))
|
||||
type = Context->getObjCIdType();
|
||||
// Make sure we convert "type (^)(...)" to "type (*)(...)".
|
||||
(void)convertBlockPointerToFunctionPointer(type);
|
||||
userExpr = NoTypeInfoCStyleCastExpr(Context, type, CK_BitCast,
|
||||
|
|
|
@ -0,0 +1,27 @@
|
|||
// RUN: %clang_cc1 -x objective-c++ -Wno-return-type -fblocks -fms-extensions -rewrite-objc %s -o %t-rw.cpp
|
||||
// RUN: %clang_cc1 -fsyntax-only -fblocks -Wno-address-of-temporary -D"id=void*" -D"SEL=void*" -D"__declspec(X)=" %t-rw.cpp
|
||||
|
||||
// rdar://9056351
|
||||
void *sel_registerName(const char *);
|
||||
|
||||
@interface NSObject @end
|
||||
@class NSString;
|
||||
|
||||
@protocol P
|
||||
-(void)ParliamentFunkadelic;
|
||||
@end
|
||||
|
||||
@interface Foo {
|
||||
NSObject <P> *_dataSource;
|
||||
}
|
||||
@end
|
||||
|
||||
@interface Bar { }
|
||||
+(void)WhateverBar:(NSString*)format, ...;
|
||||
@end
|
||||
|
||||
@implementation Foo
|
||||
-(void)WhateverFoo {
|
||||
[Bar WhateverBar:@"ISyncSessionDriverDataSource %@ responded poorly", _dataSource];
|
||||
}
|
||||
@end
|
Загрузка…
Ссылка в новой задаче