forked from OSchip/llvm-project
Fixes a rewriting bug of access ivar of a variable cast
to subclass. (Fixes radar 7575882). llvm-svn: 94444
This commit is contained in:
parent
ec039dff43
commit
d360ce9d57
|
@ -4308,7 +4308,16 @@ void RewriteObjC::RewriteCastExpr(CStyleCastExpr *CE) {
|
|||
TypeAsString.c_str(), TypeAsString.size());
|
||||
return;
|
||||
}
|
||||
|
||||
if (QT->isObjCObjectPointerType()) {
|
||||
QualType ptee = QT->getAs<ObjCObjectPointerType>()->getPointeeType();
|
||||
std::string TypeAsString = "(struct ";
|
||||
TypeAsString += ptee.getAsString();
|
||||
TypeAsString += "_IMPL *";
|
||||
TypeAsString += ")";
|
||||
ReplaceText(LocStart, endBuf-startBuf+1,
|
||||
TypeAsString.c_str(), TypeAsString.size());
|
||||
return;
|
||||
}
|
||||
// advance the location to startArgList.
|
||||
const char *argPtr = startBuf;
|
||||
|
||||
|
|
|
@ -0,0 +1,24 @@
|
|||
// RUN: %clang_cc1 -x objective-c++ -fblocks -fms-extensions -rewrite-objc %s -o %t-rw.cpp
|
||||
// RUN: FileCheck -check-prefix LP --input-file=%t-rw.cpp %s
|
||||
// radar 7575882
|
||||
|
||||
@interface F {
|
||||
int supervar;
|
||||
}
|
||||
@end
|
||||
|
||||
@interface G : F {
|
||||
@public
|
||||
int ivar;
|
||||
}
|
||||
@end
|
||||
|
||||
@implementation G
|
||||
- (void)foo:(F *)arg {
|
||||
int q = arg->supervar;
|
||||
int v = ((G *)arg)->ivar;
|
||||
}
|
||||
@end
|
||||
|
||||
// CHECK-LP: ((struct G_IMPL *)arg)->ivar
|
||||
|
Loading…
Reference in New Issue