From 3ea4adb841cabe257c010690f5a7110a01aa3c4a Mon Sep 17 00:00:00 2001 From: Argyrios Kyrtzidis Date: Fri, 24 Jun 2011 17:28:29 +0000 Subject: [PATCH] Allow the fixit for missing ':' in the ?: ternary operator if it is pointing at the start of a macro instantiation. llvm-svn: 133801 --- clang/lib/Parse/ParseExpr.cpp | 5 +++-- clang/test/FixIt/fixit.c | 5 +++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/clang/lib/Parse/ParseExpr.cpp b/clang/lib/Parse/ParseExpr.cpp index 154d8fd80923..218e18f3ad79 100644 --- a/clang/lib/Parse/ParseExpr.cpp +++ b/clang/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/clang/test/FixIt/fixit.c b/clang/test/FixIt/fixit.c index 1a6ef635570a..ba45cf28e694 100644 --- a/clang/test/FixIt/fixit.c +++ b/clang/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; }