aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/Parse/ParseExpr.cpp5
-rw-r--r--test/FixIt/fixit.c5
2 files changed, 8 insertions, 2 deletions
diff --git a/lib/Parse/ParseExpr.cpp b/lib/Parse/ParseExpr.cpp
index 154d8fd809..218e18f3ad 100644
--- a/lib/Parse/ParseExpr.cpp
+++ b/lib/Parse/ParseExpr.cpp
@@ -309,8 +309,9 @@ Parser::ParseRHSOfBinaryExpression(ExprResult LHS, prec::Level MinPrec) {
// suggest inserting the colon in between them, otherwise insert ": ".
SourceLocation FILoc = Tok.getLocation();
const char *FIText = ": ";
- if (FILoc.isFileID()) {
- const SourceManager &SM = PP.getSourceManager();
+ const SourceManager &SM = PP.getSourceManager();
+ if (FILoc.isFileID() || SM.isAtStartOfMacroInstantiation(FILoc)) {
+ FILoc = SM.getInstantiationLoc(FILoc);
bool IsInvalid = false;
const char *SourcePtr =
SM.getCharacterData(FILoc.getFileLocWithOffset(-1), &IsInvalid);
diff --git a/test/FixIt/fixit.c b/test/FixIt/fixit.c
index 1a6ef63557..ba45cf28e6 100644
--- a/test/FixIt/fixit.c
+++ b/test/FixIt/fixit.c
@@ -33,9 +33,14 @@ void f1(x, y)
int i0 = { 17 };
+#define ONE 1
+#define TWO 2
+
int test_cond(int y, int fooBar) {
// CHECK: int x = y ? 1 : 4+fooBar;
int x = y ? 1 4+foobar;
+// CHECK: x = y ? ONE : TWO;
+ x = y ? ONE TWO;
return x;
}