diff options
author | Steve Naroff <snaroff@apple.com> | 2007-12-19 14:32:56 +0000 |
---|---|---|
committer | Steve Naroff <snaroff@apple.com> | 2007-12-19 14:32:56 +0000 |
commit | 5ca4020c6e1e4f8d81cf4c2890ca8a7c0dd28d56 (patch) | |
tree | 7aa0b4d39f13f806f7bef49417339da920956900 /Driver/RewriteTest.cpp | |
parent | 0592cbe16266d560ba87ef0b6d29e14af1c56e08 (diff) |
Emit errors when attempting to rewrite ObjC expressions that originate from a macro expansion.
We plan on fixing this and removing this restriction after the break...
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@45200 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'Driver/RewriteTest.cpp')
-rw-r--r-- | Driver/RewriteTest.cpp | 70 |
1 files changed, 63 insertions, 7 deletions
diff --git a/Driver/RewriteTest.cpp b/Driver/RewriteTest.cpp index cb839ba2bd..0a6171c65f 100644 --- a/Driver/RewriteTest.cpp +++ b/Driver/RewriteTest.cpp @@ -644,7 +644,15 @@ Stmt *RewriteTest::RewriteObjCIvarRefExpr(ObjCIvarRefExpr *IV) { if (IV->isFreeIvar()) { Expr *Replacement = new MemberExpr(IV->getBase(), true, D, IV->getLocation()); - Rewrite.ReplaceStmt(IV, Replacement); + if (Rewrite.ReplaceStmt(IV, Replacement)) { + // replacement failed. + unsigned DiagID = Diags.getCustomDiagID(Diagnostic::Error, + "rewriter could not replace sub-expression due to macros"); + SourceRange Range = IV->getSourceRange(); + Diags.Report(Context->getFullLoc(IV->getLocation()), DiagID, 0, 0, &Range, 1); + delete IV; + return Replacement; + } delete IV; return Replacement; } else { @@ -660,7 +668,15 @@ Stmt *RewriteTest::RewriteObjCIvarRefExpr(ObjCIvarRefExpr *IV) { 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); + if (Rewrite.ReplaceStmt(IV->getBase(), PE)) { + // replacement failed. + unsigned DiagID = Diags.getCustomDiagID(Diagnostic::Error, + "rewriter could not replace sub-expression due to macros"); + SourceRange Range = IV->getBase()->getSourceRange(); + Diags.Report(Context->getFullLoc(IV->getBase()->getLocStart()), DiagID, 0, 0, &Range, 1); + delete IV->getBase(); + return PE; + } delete IV->getBase(); return PE; } @@ -943,7 +959,15 @@ Stmt *RewriteTest::RewriteAtSelector(ObjCSelectorExpr *Exp) { SourceLocation())); CallExpr *SelExp = SynthesizeCallToFunctionDecl(SelGetUidFunctionDecl, &SelExprs[0], SelExprs.size()); - Rewrite.ReplaceStmt(Exp, SelExp); + if (Rewrite.ReplaceStmt(Exp, SelExp)) { + // replacement failed. + unsigned DiagID = Diags.getCustomDiagID(Diagnostic::Error, + "rewriter could not replace sub-expression due to macros"); + SourceRange Range = Exp->getSourceRange(); + Diags.Report(Context->getFullLoc(Exp->getAtLoc()), DiagID, 0, 0, &Range, 1); + delete SelExp; + return Exp; + } delete Exp; return SelExp; } @@ -1269,7 +1293,15 @@ Stmt *RewriteTest::RewriteObjCStringLiteral(ObjCStringLiteral *Exp) { &StrExpr[0], StrExpr.size()); // cast to NSConstantString * CastExpr *cast = new CastExpr(Exp->getType(), call, SourceLocation()); - Rewrite.ReplaceStmt(Exp, cast); + if (Rewrite.ReplaceStmt(Exp, cast)) { + // replacement failed. + unsigned DiagID = Diags.getCustomDiagID(Diagnostic::Error, + "rewriter could not replace sub-expression due to macros"); + SourceRange Range = Exp->getSourceRange(); + Diags.Report(Context->getFullLoc(Exp->getAtLoc()), DiagID, 0, 0, &Range, 1); + delete cast; + return Exp; + } delete Exp; return cast; #else @@ -1634,12 +1666,28 @@ Stmt *RewriteTest::RewriteMessageExpr(ObjCMessageExpr *Exp) { new ConditionalOperator(lessThanExpr, CE, STCE, returnType); ParenExpr *PE = new ParenExpr(SourceLocation(), SourceLocation(), CondExpr); // Now do the actual rewrite. - Rewrite.ReplaceStmt(Exp, PE); + if (Rewrite.ReplaceStmt(Exp, PE)) { + // replacement failed. + unsigned DiagID = Diags.getCustomDiagID(Diagnostic::Error, + "rewriter could not replace sub-expression due to macros"); + SourceRange Range = Exp->getSourceRange(); + Diags.Report(Context->getFullLoc(Exp->getLocStart()), DiagID, 0, 0, &Range, 1); + delete PE; + return Exp; + } delete Exp; return PE; } // Now do the actual rewrite. - Rewrite.ReplaceStmt(Exp, CE); + if (Rewrite.ReplaceStmt(Exp, CE)) { + // replacement failed. + unsigned DiagID = Diags.getCustomDiagID(Diagnostic::Error, + "rewriter could not replace sub-expression due to macros"); + SourceRange Range = Exp->getSourceRange(); + Diags.Report(Context->getFullLoc(Exp->getLocStart()), DiagID, 0, 0, &Range, 1); + delete CE; + return Exp; + } delete Exp; return CE; @@ -1660,7 +1708,15 @@ Stmt *RewriteTest::RewriteObjCProtocolExpr(ObjCProtocolExpr *Exp) { CallExpr *ProtoExp = SynthesizeCallToFunctionDecl(GetProtocolFunctionDecl, &ProtoExprs[0], ProtoExprs.size()); - Rewrite.ReplaceStmt(Exp, ProtoExp); + if (Rewrite.ReplaceStmt(Exp, ProtoExp)) { + // replacement failed. + unsigned DiagID = Diags.getCustomDiagID(Diagnostic::Error, + "rewriter could not replace sub-expression due to macros"); + SourceRange Range = Exp->getSourceRange(); + Diags.Report(Context->getFullLoc(Exp->getAtLoc()), DiagID, 0, 0, &Range, 1); + delete ProtoExp; + return Exp; + } delete Exp; return ProtoExp; |