summaryrefslogtreecommitdiffstats
path: root/llvm/lib/MC
diff options
context:
space:
mode:
authorReid Kleckner <rnk@google.com>2017-10-16 22:20:03 +0000
committerReid Kleckner <rnk@google.com>2017-10-16 22:20:03 +0000
commitb0c9e0d647672f7b6c4f7e01f1b93dedfca7ed1c (patch)
tree1bfe644152bfae0c42915097b64c085359213bfb /llvm/lib/MC
parent03c89a840a942e38127aafd7a5eb355d39994156 (diff)
downloadbcm5719-llvm-b0c9e0d647672f7b6c4f7e01f1b93dedfca7ed1c.tar.gz
bcm5719-llvm-b0c9e0d647672f7b6c4f7e01f1b93dedfca7ed1c.zip
[MC] Lex CRLF as one token
This will prevent doubling of line endings when parsing assembly and emitting assembly. Otherwise we'd parse the directive, consume the end of statement, hit the next end of statement, and emit a fresh newline. llvm-svn: 315943
Diffstat (limited to 'llvm/lib/MC')
-rw-r--r--llvm/lib/MC/MCParser/AsmLexer.cpp10
1 files changed, 9 insertions, 1 deletions
diff --git a/llvm/lib/MC/MCParser/AsmLexer.cpp b/llvm/lib/MC/MCParser/AsmLexer.cpp
index e9123b9d714..b83b6d3dcf6 100644
--- a/llvm/lib/MC/MCParser/AsmLexer.cpp
+++ b/llvm/lib/MC/MCParser/AsmLexer.cpp
@@ -606,8 +606,16 @@ AsmToken AsmLexer::LexToken() {
return LexToken(); // Ignore whitespace.
else
return AsmToken(AsmToken::Space, StringRef(TokStart, CurPtr - TokStart));
+ case '\r': {
+ IsAtStartOfLine = true;
+ IsAtStartOfStatement = true;
+ // If this is a CR followed by LF, treat that as one token.
+ if (CurPtr != CurBuf.end() && *CurPtr == '\n')
+ ++CurPtr;
+ return AsmToken(AsmToken::EndOfStatement,
+ StringRef(TokStart, CurPtr - TokStart));
+ }
case '\n':
- case '\r':
IsAtStartOfLine = true;
IsAtStartOfStatement = true;
return AsmToken(AsmToken::EndOfStatement, StringRef(TokStart, 1));
OpenPOWER on IntegriCloud