[llvm] c6e787f - [MCAsmParser] .rept/.irp/.irpc: remove excess tail EOL in expansion
Fangrui Song via llvm-commits
llvm-commits at lists.llvm.org
Wed May 15 17:53:03 PDT 2024
Author: Fangrui Song
Date: 2024-05-15T17:52:59-07:00
New Revision: c6e787f771d1f9d6a846b2d9b8db6adcd87e8dba
URL: https://github.com/llvm/llvm-project/commit/c6e787f771d1f9d6a846b2d9b8db6adcd87e8dba
DIFF: https://github.com/llvm/llvm-project/commit/c6e787f771d1f9d6a846b2d9b8db6adcd87e8dba.diff
LOG: [MCAsmParser] .rept/.irp/.irpc: remove excess tail EOL in expansion
```
.irp foo,1
nop
.endr
nop
```
expands to an excess EOL between two nop lines. Remove the excess EOL.
Added:
Modified:
llvm/lib/MC/MCParser/AsmParser.cpp
llvm/test/MC/AsmParser/macro-rept.s
Removed:
################################################################################
diff --git a/llvm/lib/MC/MCParser/AsmParser.cpp b/llvm/lib/MC/MCParser/AsmParser.cpp
index 8d9acd54e8797..46c1caa940c5b 100644
--- a/llvm/lib/MC/MCParser/AsmParser.cpp
+++ b/llvm/lib/MC/MCParser/AsmParser.cpp
@@ -5629,27 +5629,20 @@ MCAsmMacro *AsmParser::parseMacroLikeBody(SMLoc DirectiveLoc) {
return nullptr;
}
- if (Lexer.is(AsmToken::Identifier) &&
- (getTok().getIdentifier() == ".rep" ||
- getTok().getIdentifier() == ".rept" ||
- getTok().getIdentifier() == ".irp" ||
- getTok().getIdentifier() == ".irpc")) {
- ++NestLevel;
- }
-
- // Otherwise, check whether we have reached the .endr.
- if (Lexer.is(AsmToken::Identifier) && getTok().getIdentifier() == ".endr") {
- if (NestLevel == 0) {
- EndToken = getTok();
- Lex();
- if (Lexer.isNot(AsmToken::EndOfStatement)) {
- printError(getTok().getLoc(),
- "unexpected token in '.endr' directive");
- return nullptr;
+ if (Lexer.is(AsmToken::Identifier)) {
+ StringRef Ident = getTok().getIdentifier();
+ if (Ident == ".rep" || Ident == ".rept" || Ident == ".irp" ||
+ Ident == ".irpc") {
+ ++NestLevel;
+ } else if (Ident == ".endr") {
+ if (NestLevel == 0) {
+ EndToken = getTok();
+ Lex();
+ if (!parseEOL())
+ break;
}
- break;
+ --NestLevel;
}
- --NestLevel;
}
// Otherwise, scan till the end of the statement.
diff --git a/llvm/test/MC/AsmParser/macro-rept.s b/llvm/test/MC/AsmParser/macro-rept.s
index 1dc8060e1d871..2a6a4070bff59 100644
--- a/llvm/test/MC/AsmParser/macro-rept.s
+++ b/llvm/test/MC/AsmParser/macro-rept.s
@@ -13,10 +13,10 @@
// CHECK: .long 1
// CHECK: .long 1
-// CHECK: .long 0
-// CHECK: .long 0
-// CHECK: .long 0
-
-// CHECK: .long 0
-// CHECK: .long 0
-// CHECK: .long 0
+// CHECK: .long 0
+// CHECK-NEXT: .long 0
+// CHECK-NEXT: .long 0
+// CHECK-NEXT: .long 0
+// CHECK-NEXT: .long 0
+// CHECK-NEXT: .long 0
+// CHECK-EMPTY:
More information about the llvm-commits
mailing list