forked from OSchip/llvm-project
super and class property reference expressions don't need to be
rebuilt. Fixes <rdar://problem/11052352>. llvm-svn: 154667
This commit is contained in:
parent
20735d2df8
commit
eba02fecdd
|
@ -1300,8 +1300,13 @@ static Expr *stripOpaqueValuesFromPseudoObjectRef(Sema &S, Expr *E) {
|
|||
Expr *opaqueRef = E->IgnoreParens();
|
||||
if (ObjCPropertyRefExpr *refExpr
|
||||
= dyn_cast<ObjCPropertyRefExpr>(opaqueRef)) {
|
||||
OpaqueValueExpr *baseOVE = cast<OpaqueValueExpr>(refExpr->getBase());
|
||||
return ObjCPropertyRefRebuilder(S, baseOVE->getSourceExpr()).rebuild(E);
|
||||
if (refExpr->isObjectReceiver()) {
|
||||
OpaqueValueExpr *baseOVE = cast<OpaqueValueExpr>(refExpr->getBase());
|
||||
return ObjCPropertyRefRebuilder(S, baseOVE->getSourceExpr()).rebuild(E);
|
||||
}
|
||||
|
||||
// Neither class or super property references need a rebuild.
|
||||
return E;
|
||||
} else if (ObjCSubscriptRefExpr *refExpr
|
||||
= dyn_cast<ObjCSubscriptRefExpr>(opaqueRef)) {
|
||||
OpaqueValueExpr *baseOVE = cast<OpaqueValueExpr>(refExpr->getBaseExpr());
|
||||
|
|
|
@ -42,3 +42,18 @@ typedef const TCPPObject& CREF_TCPPObject;
|
|||
cppObjectNonAtomic = cppObject;
|
||||
}
|
||||
@end
|
||||
|
||||
|
||||
// <rdar://problem/11052352>
|
||||
@interface NSObject
|
||||
+ alloc;
|
||||
- init;
|
||||
- class;
|
||||
@end
|
||||
|
||||
template<typename T> void f() {
|
||||
NSObject *o = [NSObject.alloc init];
|
||||
[o class];
|
||||
}
|
||||
|
||||
template void f<int>();
|
||||
|
|
Loading…
Reference in New Issue