diagnose, and took even longer to fix. It has to do with rewriting of a message
receiver which is an 'ivar' reference. Fix, however, is to remove a code which
was not doing the right thing and no longer needed.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@46279
91177308-0d34-0410-b5e6-
96231b3b80d8
delete IV;
return Replacement;
} else {
+#if 0
+ /// This code is not right. It seems unnecessary. It breaks use of
+ /// ivar reference used as 'receiver' of an expression; as in:
+ /// [newInv->_container addObject:0];
if (CurMethodDecl) {
if (const PointerType *pType = IV->getBase()->getType()->getAsPointerType()) {
ObjCInterfaceType *intT = dyn_cast<ObjCInterfaceType>(pType->getPointeeType());
}
}
}
+#endif
return IV;
}
}
const ObjCIvarDecl *getDecl() const { return D; }
virtual SourceRange getSourceRange() const { return SourceRange(Loc); }
Expr *const getBase() const { return Base; }
+ void setBase(Expr * base) { Base = base; }
const bool isArrow() const { return IsArrow; }
const bool isFreeIvar() const { return IsFreeIvar; }
--- /dev/null
+// RUN: clang -rewrite-test %s | clang
+// RUN: clang -rewrite-test %s | grep 'newInv->_container'
+
+@interface NSMutableArray
+- (void)addObject:(id)addObject;
+@end
+
+@interface NSInvocation {
+@private
+ id _container;
+}
++ (NSInvocation *)invocationWithMethodSignature;
+
+@end
+
+@implementation NSInvocation
+
++ (NSInvocation *)invocationWithMethodSignature {
+ NSInvocation *newInv;
+ [newInv->_container addObject:0];
+ return 0;
+}
+@end