mirror of
https://github.com/RPCSX/llvm.git
synced 2025-02-13 00:11:56 +00:00
[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
This commit is contained in:
parent
b43da93f75
commit
d73d6a2ee6
@ -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();
|
||||
|
4
test/MC/AsmParser/empty-comment.s
Normal file
4
test/MC/AsmParser/empty-comment.s
Normal file
@ -0,0 +1,4 @@
|
||||
#RUN: llvm-mc -preserve-comments -n -triple i386-linux-gnu < %s > %t
|
||||
.text
|
||||
foo:
|
||||
nop #
|
Loading…
x
Reference in New Issue
Block a user