clang-format: Fix incorrect handling of leading whitespace.

Added an assertion that triggered in an existing test case (without
observable differences) and fixed the code.

llvm-svn: 227677
This commit is contained in:
Daniel Jasper 2015-01-31 07:05:46 +00:00
parent 9fee8ab4f9
commit 30526e79e8
1 changed files with 12 additions and 6 deletions

View File

@ -245,12 +245,18 @@ unsigned ContinuationIndenter::addTokenToState(LineState &State, bool Newline,
(Current.Previous->Tok.getIdentifierInfo() == nullptr ||
Current.Previous->Tok.getIdentifierInfo()->getPPKeywordID() ==
tok::pp_not_keyword))) {
// FIXME: Is this correct?
int WhitespaceLength = SourceMgr.getSpellingColumnNumber(
State.NextToken->WhitespaceRange.getEnd()) -
SourceMgr.getSpellingColumnNumber(
State.NextToken->WhitespaceRange.getBegin());
State.Column += WhitespaceLength;
unsigned EndColumn =
SourceMgr.getSpellingColumnNumber(Current.WhitespaceRange.getEnd());
if (Current.LastNewlineOffset != 0) {
// If there is a newline within this token, the final column will solely
// determined by the current end column.
State.Column = EndColumn;
} else {
unsigned StartColumn =
SourceMgr.getSpellingColumnNumber(Current.WhitespaceRange.getBegin());
assert(EndColumn >= StartColumn);
State.Column += EndColumn - StartColumn;
}
moveStateToNextToken(State, DryRun, /*Newline=*/false);
return 0;
}