Skip to content

Commit

Permalink
[AsmParser] Hash is not a comment on some targets
Browse files Browse the repository at this point in the history
The '#' token is not a comment for all targets (on ARM and AArch64 it marks an
immediate operand), so we shouldn't treat it as such.

Comments are already converted to AsmToken::EndOfStatement by
AsmLexer::LexLineComment, so this check was unnecessary.

Differential Revision: https://reviews.llvm.org/D36405

llvm-svn: 310457
  • Loading branch information
ostannard committed Aug 9, 2017
1 parent 2cd28b2 commit 7f569a2
Show file tree
Hide file tree
Showing 6 changed files with 97 additions and 115 deletions.
10 changes: 0 additions & 10 deletions llvm/lib/MC/MCParser/AsmParser.cpp
Expand Up @@ -1648,16 +1648,6 @@ bool AsmParser::parseStatement(ParseStatementInfo &Info,
Lex();
return false;
}
if (Lexer.is(AsmToken::Hash)) {
// Seeing a hash here means that it was an end-of-line comment in
// an asm syntax where hash's are not comment and the previous
// statement parser did not check the end of statement. Relex as
// EndOfStatement.
StringRef CommentStr = parseStringToEndOfStatement();
Lexer.Lex();
Lexer.UnLex(AsmToken(AsmToken::EndOfStatement, CommentStr));
return false;
}
// Statements always start with an identifier.
AsmToken ID = getTok();
SMLoc IDLoc = ID.getLoc();
Expand Down
8 changes: 0 additions & 8 deletions llvm/lib/MC/MCParser/MCAsmParser.cpp
Expand Up @@ -40,11 +40,6 @@ bool MCAsmParser::parseTokenLoc(SMLoc &Loc) {
}

bool MCAsmParser::parseEOL(const Twine &Msg) {
if (getTok().getKind() == AsmToken::Hash) {
StringRef CommentStr = parseStringToEndOfStatement();
getLexer().Lex();
getLexer().UnLex(AsmToken(AsmToken::EndOfStatement, CommentStr));
}
if (getTok().getKind() != AsmToken::EndOfStatement)
return Error(getTok().getLoc(), Msg);
Lex();
Expand All @@ -70,9 +65,6 @@ bool MCAsmParser::parseIntToken(int64_t &V, const Twine &Msg) {

bool MCAsmParser::parseOptionalToken(AsmToken::TokenKind T) {
bool Present = (getTok().getKind() == T);
// if token is EOL and current token is # this is an EOL comment.
if (getTok().getKind() == AsmToken::Hash && T == AsmToken::EndOfStatement)
Present = true;
if (Present)
parseToken(T);
return Present;
Expand Down
2 changes: 1 addition & 1 deletion llvm/test/DebugInfo/AArch64/asan-stack-vars.ll
Expand Up @@ -210,7 +210,7 @@ entry:
%72 = load i8*, i8** @OBJC_SELECTOR_REFERENCES_.4, align 8, !dbg !55, !invariant.load !2
%73 = bitcast %0* %65 to i8*, !dbg !55
%call2 = call i8* bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* %73, i8* %72), !dbg !55
call void asm sideeffect "mov\09fp, fp\09\09# marker for objc_retainAutoreleaseReturnValue", ""(), !dbg !55
call void asm sideeffect "mov\09fp, fp\09\09; marker for objc_retainAutoreleaseReturnValue", ""(), !dbg !55
%74 = call i8* @objc_retainAutoreleasedReturnValue(i8* %call2) #3, !dbg !55
%75 = bitcast %0** %5 to i8**, !dbg !56
call void @objc_storeStrong(i8** %75, i8* null) #3, !dbg !56
Expand Down
Expand Up @@ -33,7 +33,7 @@ l:
p:
# R_AARCH64_ADR_PREL_PG_HI21
# Test both low and high immediate values
adrp x4, a + 20480 # 16384 + 4096
adrp x4, a + 20480 // 16384 + 4096
# Align next label to 16 bytes, so that LDST immediate
# fields will be non-zero
.align 4
Expand Down
66 changes: 33 additions & 33 deletions llvm/test/MC/ARM/directive_parsing.s
Expand Up @@ -4,167 +4,167 @@
// CHECK: [[@LINE+1]]:10: error: unexpected token
.word 0 $
// CHECK-NOT: [[@LINE+1]]:{{[0-9]+}}: error:
.word 0 # EOL COMMENT
.word 0 @ EOL COMMENT
// CHECK: [[@LINE+1]]:11: error: unexpected token
.short 0 $
// CHECK-NOT: [[@LINE+1]]:{{[0-9]+}}: error:
.short 0 # EOL COMMENT
.short 0 @ EOL COMMENT
// CHECK: [[@LINE+1]]:11: error: unexpected token
.hword 0 $
// CHECK-NOT: [[@LINE+1]]:{{[0-9]+}}: error:
.hword 0 # EOL COMMENT
.hword 0 @ EOL COMMENT

.arch armv7-a
// CHECK: [[@LINE+1]]:9: error: unexpected token in directive
.thumb $
// CHECK-NOT: [[@LINE+1]]:{{[0-9]+}}: error:
.thumb # EOL COMMENT
.thumb @ EOL COMMENT

// CHECK: [[@LINE+1]]:7: error: unexpected token in directive
.arm $
// CHECK-NOT: [[@LINE+1]]:{{[0-9]+}}: error:
.arm # EOL COMMENT
.arm @ EOL COMMENT
// CHECK: [[@LINE+1]]:14: error: unexpected token in '.thumb_func' directive
.thumb_func $
// CHECK-NOT: [[@LINE+1]]:{{[0-9]+}}: error:
.thumb_func # EOL COMMENT
.thumb_func @ EOL COMMENT
// CHECK: [[@LINE+1]]:11: error: unexpected token in directive
.code 16 $
// CHECK-NOT: [[@LINE+1]]:{{[0-9]+}}: error:
.code 16 # EOL COMMENTS
.code 16 @ EOL COMMENTS
// CHECK: [[@LINE+1]]:18: error: unexpected token in directive
.syntax unified $
// CHECK-NOT: [[@LINE+1]]:{{[0-9]+}}: error:
.syntax unified # EOL COMMENT
.syntax unified @ EOL COMMENT
fred .req r5
// CHECK: [[@LINE+1]]:14: error: unexpected input in '.unreq' directive
.unreq fred $
// CHECK-NOT: [[@LINE+1]]:{{[0-9]+}}: error:
.unreq fred # EOL COMMENTS
.unreq fred @ EOL COMMENTS

// CHECK: [[@LINE+1]]:18: error: unexpected token in '.fnstart' directive
.fnstart $
// CHECK-NOT: [[@LINE+1]]:{{[0-9]+}}: error:
.fnstart # EOL COMMENT
.fnstart @ EOL COMMENT
// CHECK: [[@LINE+1]]:23: error: unexpected token in '.cantunwind' directive
.cantunwind $
// CHECK-NOT: [[@LINE+1]]:{{[0-9]+}}: error:
.cantunwind # EOL COMMENT
.cantunwind @ EOL COMMENT


// CHECK: [[@LINE+1]]:18: error: unexpected token in '.fnend' directive
.fnend $
// CHECK-NOT: [[@LINE+1]]:{{[0-9]+}}: error:
.fnend # EOL COMMENT
.fnend @ EOL COMMENT

.fnstart
// CHECK: [[@LINE+1]]:43: error: unexpected token in '.personality' directive
.personality __gxx_personality_v0 $
// CHECK-NOT: [[@LINE+1]]:{{[0-9]+}}: error:
.personality __gxx_personality_v0 # EOL COMMENET
.personality __gxx_personality_v0 @ EOL COMMENET

// CHECK: [[@LINE+1]]:28: error: unexpected token
.setfp fp, sp, #0 $
// CHECK-NOT: [[@LINE+1]]:{{[0-9]+}}: error:
.setfp fp, sp, #0 # EOL COMMENT
.setfp fp, sp, #0 @ EOL COMMENT


// CHECK: [[@LINE+1]]:17: error: unexpected token in '.pad' directive
.pad #0 $
// CHECK-NOT: [[@LINE+1]]:{{[0-9]+}}: error:
.pad #0 # EOL COMMENT
.pad #0 @ EOL COMMENT

// CHECK: [[@LINE+1]]:20: error: unexpected token in directive
.save {r0} $
// CHECK-NOT: [[@LINE+1]]:{{[0-9]+}}: error:
.save {r0} # EOL COMMENT
.save {r0} @ EOL COMMENT

// CHECK: [[@LINE+1]]:21: error: unexpected token in directive
.vsave {d0} $
// CHECK-NOT: [[@LINE+1]]:{{[0-9]+}}: error:
.vsave {d0} # EOL COMMENT
.vsave {d0} @ EOL COMMENT


// CHECK: [[@LINE+1]]:22: error: unexpected token in '.handlerdata' directive
.handlerdata $
// CHECK-NOT: [[@LINE+1]]:{{[0-9]+}}: error:
.handlerdata # EOL COMMENT
.handlerdata @ EOL COMMENT

.fnend

// CHECK: [[@LINE+1]]:9: error: unexpected token in directive
.ltorg $
// CHECK-NOT: [[@LINE+1]]:{{[0-9]+}}: error:
.ltorg # EOL COMMENT
.ltorg @ EOL COMMENT
// CHECK: [[@LINE+1]]:8: error: unexpected token in directive
.pool $
// CHECK-NOT: [[@LINE+1]]:{{[0-9]+}}: error:
.pool # EOL COMMENT
.pool @ EOL COMMENT
// CHECK: [[@LINE+1]]:8: error: unexpected token in directive
.even $
// CHECK-NOT: [[@LINE+1]]:{{[0-9]+}}: error:
.even # EOL COMMENT
.even @ EOL COMMENT
.fnstart
// CHECK: [[@LINE+1]]:22: error: unexpected token in '.personalityindex' directive
.personalityindex 0 $
// CHECK-NOT: [[@LINE+1]]:{{[0-9]+}}: error:
.personalityindex 0 # EOL COMMENT
.personalityindex 0 @ EOL COMMENT
.fnend

.fnstart
// CHECK: [[@LINE+1]]:19: error: unexpected token
.unwind_raw 0, 0 $
// CHECK-NOT: [[@LINE+1]]:{{[0-9]+}}: error:
.unwind_raw 0, 0 # EOL COMMENT
.unwind_raw 0, 0 @ EOL COMMENT

// CHECK: [[@LINE+1]]:12: error: unexpected token in '.movsp' directive
.movsp r0 $
// CHECK-NOT: [[@LINE+1]]:{{[0-9]+}}: error:
.movsp r1 # EOL COMMENT
.movsp r1 @ EOL COMMENT
.fnend

// CHECK: [[@LINE+1]]:21: error: unexpected token in '.arch_extension' directive
.arch_extension mp $
// CHECK-NOT: [[@LINE+1]]:{{[0-9]+}}: error:
.arch_extension mp # EOL COMMENT
.arch_extension mp @ EOL COMMENT

// CHECK: [[@LINE+1]]:21: error: unexpected token in '.arch_extension' directive
.arch_extension mp $
// CHECK-NOT: [[@LINE+1]]:{{[0-9]+}}: error:
.arch_extension mp # EOL COMMENT
.arch_extension mp @ EOL COMMENT

.type arm_func,%function
arm_func:
nop
// CHECK: [[@LINE+1]]:45: error: unexpected token
.thumb_set alias_arm_func, arm_func $
// CHECK-NOT: [[@LINE+1]]:{{[0-9]+}}: error:
.thumb_set alias_arm_func, arm_func # EOL COMMENT
.thumb_set alias_arm_func, arm_func @ EOL COMMENT

// CHECK: [[@LINE+1]]:23: error: unexpected token in '.eabi_attribute' directive
.eabi_attribute 0, 0 $
// CHECK-NOT: [[@LINE+1]]:{{[0-9]+}}: error:
.eabi_attribute 0, 0 # EOL COMMENT
.eabi_attribute 0, 0 @ EOL COMMENT

.arm
// CHECK: [[@LINE+1]]:10: error: unexpected token
.inst 2 $
// CHECK-NOT: [[@LINE+1]]:{{[0-9]+}}: error:
.inst 2 # EOL COMMENT
.inst 2 @ EOL COMMENT
.thumb
// CHECK: [[@LINE+1]]:12: error: unexpected token
.inst.n 2 $
// CHECK-NOT: [[@LINE+1]]:{{[0-9]+}}: error:
.inst.n 2 # EOL COMMENT
.inst.n 2 @ EOL COMMENT
// CHECK: [[@LINE+1]]:12: error: unexpected token
.inst.w 4 $
// CHECK-NOT: [[@LINE+1]]:{{[0-9]+}}: error:
.inst.w 4 # EOL COMMENT
.inst.w 4 @ EOL COMMENT
// CHECK: [[@LINE+1]]:21: error: unexpected token
.object_arch armv7 $
// CHECK-NOT: [[@LINE+1]]:{{[0-9]+}}: error:
.object_arch armv7 # EOL COMMENT
.object_arch armv7 @ EOL COMMENT
// CHECK: [[@LINE+1]]:23: error: unexpected token in '.tlsdescseq' directive
.tlsdescseq variable $
// CHECK-NOT: [[@LINE+1]]:{{[0-9]+}}: error:
.tlsdescseq variable # EOL COMMENT
.tlsdescseq variable @ EOL COMMENT

0 comments on commit 7f569a2

Please sign in to comment.