From d73d6a2ee6078b63f2dc1f6e9ba39295d4d9d0e5 Mon Sep 17 00:00:00 2001 From: Nirav Dave Date: Fri, 9 Jun 2017 14:04:03 +0000 Subject: [PATCH] [MC] Fix compiler crash in AsmParser::Lex When an empty comment is present in an assembly file, the compiler will crash because it checks the first character for '\n' or '\r'. The fix consists of also checking if the string is empty before accessing the *front* method of the StringRef. A test is included for the x86 target, but this issue is reproducible with other targets as well. Patch by Alexandru Guduleasa! Reviewers: niravd, grosbach, llvm-commits Reviewed By: niravd Differential Revision: https://reviews.llvm.org/D33993 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@305077 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/MC/MCParser/AsmParser.cpp | 4 ++-- test/MC/AsmParser/empty-comment.s | 4 ++++ 2 files changed, 6 insertions(+), 2 deletions(-) create mode 100644 test/MC/AsmParser/empty-comment.s diff --git a/lib/MC/MCParser/AsmParser.cpp b/lib/MC/MCParser/AsmParser.cpp index 2e6ca7be15f..dad47e49e2c 100644 --- a/lib/MC/MCParser/AsmParser.cpp +++ b/lib/MC/MCParser/AsmParser.cpp @@ -703,7 +703,7 @@ const AsmToken &AsmParser::Lex() { // if it's a end of statement with a comment in it if (getTok().is(AsmToken::EndOfStatement)) { // if this is a line comment output it. - if (getTok().getString().front() != '\n' && + if (!getTok().getString().empty() && getTok().getString().front() != '\n' && getTok().getString().front() != '\r' && MAI.preserveAsmComments()) Out.addExplicitComment(Twine(getTok().getString())); } @@ -1523,7 +1523,7 @@ bool AsmParser::parseStatement(ParseStatementInfo &Info, Lex(); if (Lexer.is(AsmToken::EndOfStatement)) { // if this is a line comment we can drop it safely - if (getTok().getString().front() == '\r' || + if (getTok().getString().empty() || getTok().getString().front() == '\r' || getTok().getString().front() == '\n') Out.AddBlankLine(); Lex(); diff --git a/test/MC/AsmParser/empty-comment.s b/test/MC/AsmParser/empty-comment.s new file mode 100644 index 00000000000..57df820007c --- /dev/null +++ b/test/MC/AsmParser/empty-comment.s @@ -0,0 +1,4 @@ + #RUN: llvm-mc -preserve-comments -n -triple i386-linux-gnu < %s > %t + .text +foo: + nop # \ No newline at end of file -- 2.50.1