[MCParser] Correctly handle CRLF line ends when consuming line comments

Fixes issue: https://bugs.llvm.org/show_bug.cgi?id=47983

The AsmLexer currently has an issue with lexing line comments in files
with CRLF line endings, in which it reads the carriage return as being
part of the line comment. This causes an error for certain valid comment
layouts; this patch fixes this by excluding the carriage return from the
line comment.

Differential Revision: https://reviews.llvm.org/D90234
This commit is contained in:
Tozer 2021-08-17 15:38:45 +01:00
parent c67f497e7a
commit 5c6f748cbc
3 changed files with 8 additions and 2 deletions

3
llvm/.gitattributes vendored
View File

@ -13,7 +13,8 @@ test/tools/llvm-strings/Inputs/numbers binary
test/MC/AsmParser/incbin_abcd binary
test/YAMLParser/spec-09-02.test binary
# This file must have CRLF line endings, therefore git should treat it as
# These files must have CRLF line endings, therefore git should treat them as
# binary and not autoconvert line endings (for example, when core.autocrlf is
# on).
test/MC/AsmParser/preserve-comments-crlf.s binary
test/tools/llvm-mca/directives-handle-crlf.s binary

View File

@ -228,6 +228,7 @@ AsmToken AsmLexer::LexLineComment() {
int CurChar = getNextChar();
while (CurChar != '\n' && CurChar != '\r' && CurChar != EOF)
CurChar = getNextChar();
const char *NewlinePtr = CurPtr;
if (CurChar == '\r' && CurPtr != CurBuf.end() && *CurPtr == '\n')
++CurPtr;
@ -235,7 +236,7 @@ AsmToken AsmLexer::LexLineComment() {
if (CommentConsumer) {
CommentConsumer->HandleComment(
SMLoc::getFromPointer(CommentTextStart),
StringRef(CommentTextStart, CurPtr - 1 - CommentTextStart));
StringRef(CommentTextStart, NewlinePtr - 1 - CommentTextStart));
}
IsAtStartOfLine = true;

View File

@ -0,0 +1,4 @@
# RUN: llvm-mca -mtriple=x86_64-unknown-unknown %s
# LLVM-MCA-BEGIN foo
addl $42, %eax
# LLVM-MCA-END