[llvm] 5c6f748 - [MCParser] Correctly handle CRLF line ends when consuming line comments
via llvm-commits
llvm-commits at lists.llvm.org
Tue Aug 17 07:53:45 PDT 2021
Author: Tozer
Date: 2021-08-17T15:52:51+01:00
New Revision: 5c6f748cbc17d4ce82374f0c4c2364961152a1c4
URL: https://github.com/llvm/llvm-project/commit/5c6f748cbc17d4ce82374f0c4c2364961152a1c4
DIFF: https://github.com/llvm/llvm-project/commit/5c6f748cbc17d4ce82374f0c4c2364961152a1c4.diff
LOG: [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
Added:
llvm/test/tools/llvm-mca/directives-handle-crlf.s
Modified:
llvm/.gitattributes
llvm/lib/MC/MCParser/AsmLexer.cpp
Removed:
################################################################################
diff --git a/llvm/.gitattributes b/llvm/.gitattributes
index 48ddf2f02d15b..b41ae6aec97b3 100644
--- a/llvm/.gitattributes
+++ b/llvm/.gitattributes
@@ -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
diff --git a/llvm/lib/MC/MCParser/AsmLexer.cpp b/llvm/lib/MC/MCParser/AsmLexer.cpp
index e328ba5315af5..bf9b9e916d6f6 100644
--- a/llvm/lib/MC/MCParser/AsmLexer.cpp
+++ b/llvm/lib/MC/MCParser/AsmLexer.cpp
@@ -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;
diff --git a/llvm/test/tools/llvm-mca/directives-handle-crlf.s b/llvm/test/tools/llvm-mca/directives-handle-crlf.s
new file mode 100644
index 0000000000000..aa5c0fc205f50
--- /dev/null
+++ b/llvm/test/tools/llvm-mca/directives-handle-crlf.s
@@ -0,0 +1,4 @@
+# RUN: llvm-mca -mtriple=x86_64-unknown-unknown %s
+# LLVM-MCA-BEGIN foo
+addl $42, %eax
+# LLVM-MCA-END
More information about the llvm-commits
mailing list