----- Original Message -----
> From: "Eli Friedman" <[email protected]>
> To: "Hal Finkel" <[email protected]>
> Cc: "llvm cfe" <[email protected]>
> Sent: Wednesday, January 9, 2013 4:40:18 PM
> Subject: Re: [cfe-commits] [PATCH] Correct first-line indentation in
> preprocessor output
>
> On Wed, Jan 9, 2013 at 2:20 PM, Hal Finkel <[email protected]> wrote:
> > Currently, the -E output from clang does not produce the correct
> > indentation on the first line. This is because MoveToLine returns
> > false, and when this happens, the regular process for producing
> > initial indentation is skipped. This patch makes sure this does
> > not happen on the first line -- it is not clear to me whether
> > there are other circumstances where the current logic could be
> > problematic.
> >
> > It looks like calling SourceManager::getPresumedLoc is a relatively
> > expensive operation, so however this is fixed, I assume that we
> > want to minimize calls to that function.
> >
> > Please review.
>
> --- a/lib/Frontend/PrintPreprocessedOutput.cpp
> +++ b/lib/Frontend/PrintPreprocessedOutput.cpp
> @@ -139,10 +139,13 @@ public:
> diag::Mapping Map, StringRef Str);
>
> bool HandleFirstTokOnLine(Token &Tok);
> - bool MoveToLine(SourceLocation Loc) {
> + bool MoveToLine(SourceLocation Loc, bool *FirstLine = 0) {
> PresumedLoc PLoc = SM.getPresumedLoc(Loc);
> - if (PLoc.isInvalid())
> + if (PLoc.isInvalid()) {
> + if (FirstLine) *FirstLine = false;
> return false;
> + }
> + if (FirstLine) *FirstLine = PLoc.getLine() == 1;
> return MoveToLine(PLoc.getLine());
> }
> bool MoveToLine(unsigned LineNo);
>
> There is precisely one user of the return value of MoveToLine: the
> one
> you're modifying. Why do we need an extra out parameter?
Good point, thanks! Revised patch attached -- which now changes one source line
;)
-Hal
>
> -Eli
>
--
Hal Finkel
Postdoctoral Appointee
Leadership Computing Facility
Argonne National Laboratory
diff --git a/lib/Frontend/PrintPreprocessedOutput.cpp b/lib/Frontend/PrintPreprocessedOutput.cpp
index 02da71b..1c7aacc 100644
--- a/lib/Frontend/PrintPreprocessedOutput.cpp
+++ b/lib/Frontend/PrintPreprocessedOutput.cpp
@@ -143,7 +143,7 @@ public:
PresumedLoc PLoc = SM.getPresumedLoc(Loc);
if (PLoc.isInvalid())
return false;
- return MoveToLine(PLoc.getLine());
+ return MoveToLine(PLoc.getLine()) || (PLoc.getLine() == 1);
}
bool MoveToLine(unsigned LineNo);
diff --git a/test/Preprocessor/first-line-indent.c b/test/Preprocessor/first-line-indent.c
index 8038b9d..2b2a30e 100644
--- a/test/Preprocessor/first-line-indent.c
+++ b/test/Preprocessor/first-line-indent.c
@@ -2,6 +2,6 @@
// RUN: %clang_cc1 -E %s | FileCheck -strict-whitespace %s
bar
-// CHECK: [ ]{7}foo
-// CHECK: [ ]{7}bar
+// CHECK: {{ }}foo
+// CHECK: {{ }}bar
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits