summaryrefslogtreecommitdiffstats
path: root/clang/Driver/RewriteTest.cpp
diff options
context:
space:
mode:
authorSteve Naroff <snaroff@apple.com>2007-11-15 11:33:00 +0000
committerSteve Naroff <snaroff@apple.com>2007-11-15 11:33:00 +0000
commit05caa48fb403cfd5a73909e317e8f1d9e4cb75f4 (patch)
tree2663b2ff53d3bd6f2e162f8d961a3a3a2d2310f2 /clang/Driver/RewriteTest.cpp
parent44864e48bd7f4736f90402658268d139a49cc207 (diff)
downloadbcm5719-llvm-05caa48fb403cfd5a73909e317e8f1d9e4cb75f4.tar.gz
bcm5719-llvm-05caa48fb403cfd5a73909e317e8f1d9e4cb75f4.zip
Extend RewriteTest::RewriteObjCIvarRefExpr() to cope with static typing (when using -> on a type which corresponds to the implementation type).
llvm-svn: 44170
Diffstat (limited to 'clang/Driver/RewriteTest.cpp')
-rw-r--r--clang/Driver/RewriteTest.cpp22
1 files changed, 20 insertions, 2 deletions
diff --git a/clang/Driver/RewriteTest.cpp b/clang/Driver/RewriteTest.cpp
index 5dc36923fcb..a768d17b3a5 100644
--- a/clang/Driver/RewriteTest.cpp
+++ b/clang/Driver/RewriteTest.cpp
@@ -594,9 +594,27 @@ Stmt *RewriteTest::RewriteObjCIvarRefExpr(ObjCIvarRefExpr *IV) {
Rewrite.ReplaceStmt(IV, Replacement);
delete IV;
return Replacement;
- }
- else
+ } else {
+ if (CurMethodDecl) {
+ if (const PointerType *pType = IV->getBase()->getType()->getAsPointerType()) {
+ ObjcInterfaceType *intT = dyn_cast<ObjcInterfaceType>(pType->getPointeeType());
+ if (CurMethodDecl->getClassInterface() == intT->getDecl()) {
+ IdentifierInfo *II = intT->getDecl()->getIdentifier();
+ RecordDecl *RD = new RecordDecl(Decl::Struct, SourceLocation(),
+ II, 0);
+ QualType castT = Context->getPointerType(Context->getTagDeclType(RD));
+
+ CastExpr *castExpr = new CastExpr(castT, IV->getBase(), SourceLocation());
+ // Don't forget the parens to enforce the proper binding.
+ ParenExpr *PE = new ParenExpr(SourceLocation(), SourceLocation(), castExpr);
+ Rewrite.ReplaceStmt(IV->getBase(), PE);
+ delete IV->getBase();
+ return PE;
+ }
+ }
+ }
return IV;
+ }
}
//===----------------------------------------------------------------------===//
OpenPOWER on IntegriCloud