[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