summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--clang/lib/Frontend/PrintPreprocessedOutput.cpp7
-rw-r--r--clang/test/Preprocessor/macro_expand_empty.c2
2 files changed, 8 insertions, 1 deletions
diff --git a/clang/lib/Frontend/PrintPreprocessedOutput.cpp b/clang/lib/Frontend/PrintPreprocessedOutput.cpp
index fd470ec5fdb..489227d9d7e 100644
--- a/clang/lib/Frontend/PrintPreprocessedOutput.cpp
+++ b/clang/lib/Frontend/PrintPreprocessedOutput.cpp
@@ -521,6 +521,13 @@ bool PrintPPOutputPPCallbacks::HandleFirstTokOnLine(Token &Tok) {
// indented for easy reading.
unsigned ColNo = SM.getExpansionColumnNumber(Tok.getLocation());
+ // The first token on a line can have a column number of 1, yet still expect
+ // leading white space, if a macro expansion in column 1 starts with an empty
+ // macro argument, or an empty nested macro expansion. In this case, move the
+ // token to column 2.
+ if (ColNo == 1 && Tok.hasLeadingSpace())
+ ColNo = 2;
+
// This hack prevents stuff like:
// #define HASH #
// HASH define foo bar
diff --git a/clang/test/Preprocessor/macro_expand_empty.c b/clang/test/Preprocessor/macro_expand_empty.c
index c3fc4f2964e..55077288814 100644
--- a/clang/test/Preprocessor/macro_expand_empty.c
+++ b/clang/test/Preprocessor/macro_expand_empty.c
@@ -17,5 +17,5 @@ IDENTITY0()
#define FOO() BAR() second
#define BAR()
first // CHECK: {{^}}first{{$}}
-FOO() // CHECK: second
+FOO() // CHECK: {{^}} second{{$}}
third // CHECK: {{^}}third{{$}}
OpenPOWER on IntegriCloud