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());
|
TypeAsString.c_str(), TypeAsString.size());
|
||||||
return;
|
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.
|
// advance the location to startArgList.
|
||||||
const char *argPtr = startBuf;
|
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