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:
Fariborz Jahanian 2011-02-26 01:31:36 +00:00
Родитель baac58d1a6
Коммит dff3f018e0
2 изменённых файлов: 30 добавлений и 3 удалений

Просмотреть файл

@ -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