mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-14 00:32:55 +00:00
AsmParser: cleanup diagnostics for .rep/.rept
Avoid double diagnostics for invalid expressions for count. Improve caret location for negative count. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@198099 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
b5191e98e8
commit
14b42a1c92
@ -3958,12 +3958,19 @@ void AsmParser::instantiateMacroLikeBody(MCAsmMacro *M, SMLoc DirectiveLoc,
|
||||
/// parseDirectiveRept
|
||||
/// ::= .rep | .rept count
|
||||
bool AsmParser::parseDirectiveRept(SMLoc DirectiveLoc, StringRef Dir) {
|
||||
const MCExpr *CountExpr;
|
||||
SMLoc CountLoc = getTok().getLoc();
|
||||
if (parseExpression(CountExpr))
|
||||
return true;
|
||||
|
||||
int64_t Count;
|
||||
if (parseAbsoluteExpression(Count))
|
||||
return TokError("unexpected token in '" + Dir + "' directive");
|
||||
if (!CountExpr->EvaluateAsAbsolute(Count)) {
|
||||
eatToEndOfStatement();
|
||||
return Error(CountLoc, "unexpected token in '" + Dir + "' directive");
|
||||
}
|
||||
|
||||
if (Count < 0)
|
||||
return TokError("Count is negative");
|
||||
return Error(CountLoc, "Count is negative");
|
||||
|
||||
if (Lexer.isNot(AsmToken::EndOfStatement))
|
||||
return TokError("unexpected token in '" + Dir + "' directive");
|
||||
|
41
test/MC/AsmParser/directive_rept-diagnostics.s
Normal file
41
test/MC/AsmParser/directive_rept-diagnostics.s
Normal file
@ -0,0 +1,41 @@
|
||||
# RUN: not llvm-mc -triple i686-elf -filetype asm -o /dev/null %s 2>&1 \
|
||||
# RUN: | FileCheck %s
|
||||
|
||||
.data
|
||||
|
||||
.global invalid_expression
|
||||
.type invalid_expression,@object
|
||||
invalid_expression:
|
||||
.rept *
|
||||
|
||||
# CHECK: error: unknown token in expression
|
||||
# CHECK: .rept *
|
||||
# CHECK: ^
|
||||
|
||||
.global bad_token
|
||||
.type bad_token,@object
|
||||
bad_token:
|
||||
.rept bad_token
|
||||
|
||||
# CHECK: error: unexpected token in '.rept' directive
|
||||
# CHECK: .rept bad_token
|
||||
# CHECK: ^
|
||||
|
||||
.global negative
|
||||
.type negative,@object
|
||||
negative:
|
||||
.rept -32
|
||||
|
||||
# CHECK: error: Count is negative
|
||||
# CHECK: .rept -32
|
||||
# CHECK: ^
|
||||
|
||||
.global trailer
|
||||
.type trailer,@object
|
||||
trailer:
|
||||
.rep 0 trailer
|
||||
|
||||
# CHECK: error: unexpected token in '.rep' directive
|
||||
# CHECK: .rep 0 trailer
|
||||
# CHECK: ^
|
||||
|
Loading…
x
Reference in New Issue
Block a user