Ping.

 -Hal

----- Original Message -----
> From: "Hal Finkel" <[email protected]>
> To: "Eli Friedman" <[email protected]>
> Cc: "llvm cfe" <[email protected]>
> Sent: Wednesday, January 16, 2013 11:45:56 AM
> Subject: Re: [cfe-commits] [PATCH] Correct first-line indentation in 
> preprocessor output
> 
> Ping.
> 
> Thanks again,
> Hal
> 
> ----- Original Message -----
> > From: "Hal Finkel" <[email protected]>
> > To: "Eli Friedman" <[email protected]>
> > Cc: "llvm cfe" <[email protected]>
> > Sent: Wednesday, January 9, 2013 5:00:14 PM
> > Subject: Re: [cfe-commits] [PATCH] Correct first-line indentation
> > in preprocessor output
> > 
> > ----- 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
> > 
> > _______________________________________________
> > cfe-commits mailing list
> > [email protected]
> > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
> > 
> 
> --
> Hal Finkel
> Postdoctoral Appointee
> Leadership Computing Facility
> Argonne National Laboratory
> 
> _______________________________________________
> cfe-commits mailing list
> [email protected]
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
> 
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

Reply via email to