aboutsummaryrefslogtreecommitdiff
path: root/Driver/RewriteTest.cpp
diff options
context:
space:
mode:
authorSteve Naroff <snaroff@apple.com>2007-12-19 14:32:56 +0000
committerSteve Naroff <snaroff@apple.com>2007-12-19 14:32:56 +0000
commit5ca4020c6e1e4f8d81cf4c2890ca8a7c0dd28d56 (patch)
tree7aa0b4d39f13f806f7bef49417339da920956900 /Driver/RewriteTest.cpp
parent0592cbe16266d560ba87ef0b6d29e14af1c56e08 (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.cpp70
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;