Skip to content

Commit 1e5f29a

Browse files
committed
Revert "[MCAsmParser] .rept/.irp/.irpc: remove excess tail EOL in expansion"
This reverts commit c6e787f. parseEOL() would remove \n # after .endr, not recognizing the line marker. ``` // reduced from Linux kernel arch/x86/crypto/sha1_avx2_x86_64_asm.S .rept 1 nop .endr # 512 "a.s" ```
1 parent 48b23c0 commit 1e5f29a

File tree

2 files changed

+26
-19
lines changed

2 files changed

+26
-19
lines changed

llvm/lib/MC/MCParser/AsmParser.cpp

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5624,20 +5624,27 @@ MCAsmMacro *AsmParser::parseMacroLikeBody(SMLoc DirectiveLoc) {
56245624
return nullptr;
56255625
}
56265626

5627-
if (Lexer.is(AsmToken::Identifier)) {
5628-
StringRef Ident = getTok().getIdentifier();
5629-
if (Ident == ".rep" || Ident == ".rept" || Ident == ".irp" ||
5630-
Ident == ".irpc") {
5631-
++NestLevel;
5632-
} else if (Ident == ".endr") {
5633-
if (NestLevel == 0) {
5634-
EndToken = getTok();
5635-
Lex();
5636-
if (!parseEOL())
5637-
break;
5627+
if (Lexer.is(AsmToken::Identifier) &&
5628+
(getTok().getIdentifier() == ".rep" ||
5629+
getTok().getIdentifier() == ".rept" ||
5630+
getTok().getIdentifier() == ".irp" ||
5631+
getTok().getIdentifier() == ".irpc")) {
5632+
++NestLevel;
5633+
}
5634+
5635+
// Otherwise, check whether we have reached the .endr.
5636+
if (Lexer.is(AsmToken::Identifier) && getTok().getIdentifier() == ".endr") {
5637+
if (NestLevel == 0) {
5638+
EndToken = getTok();
5639+
Lex();
5640+
if (Lexer.isNot(AsmToken::EndOfStatement)) {
5641+
printError(getTok().getLoc(),
5642+
"unexpected token in '.endr' directive");
5643+
return nullptr;
56385644
}
5639-
--NestLevel;
5645+
break;
56405646
}
5647+
--NestLevel;
56415648
}
56425649

56435650
// Otherwise, scan till the end of the statement.

llvm/test/MC/AsmParser/macro-rept.s

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,10 @@
1313
// CHECK: .long 1
1414
// CHECK: .long 1
1515

16-
// CHECK: .long 0
17-
// CHECK-NEXT: .long 0
18-
// CHECK-NEXT: .long 0
19-
// CHECK-NEXT: .long 0
20-
// CHECK-NEXT: .long 0
21-
// CHECK-NEXT: .long 0
22-
// CHECK-EMPTY:
16+
// CHECK: .long 0
17+
// CHECK: .long 0
18+
// CHECK: .long 0
19+
20+
// CHECK: .long 0
21+
// CHECK: .long 0
22+
// CHECK: .long 0

0 commit comments

Comments
 (0)