Fix PR23872: Integrated assembler error message when using .type directive with @ in AArch32 assembly.

The AArch32 assembler parses the '@' as a comment symbol, so the error message shouldn't suggest
that '@<type>' is a valid replacement when assembling for AArch32 target.

Differential Revision: http://reviews.llvm.org/D10651 


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@241149 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Gabor Ballabas 2015-07-01 08:58:49 +00:00
parent 787b9b4e95
commit 9f9bf86ed5
2 changed files with 38 additions and 4 deletions

View File

@ -593,10 +593,16 @@ bool ELFAsmParser::ParseDirectiveType(StringRef, SMLoc) {
Lex();
if (getLexer().isNot(AsmToken::Identifier) &&
getLexer().isNot(AsmToken::Hash) && getLexer().isNot(AsmToken::At) &&
getLexer().isNot(AsmToken::Percent) && getLexer().isNot(AsmToken::String))
return TokError("expected STT_<TYPE_IN_UPPER_CASE>, '#<type>', '@<type>', "
"'%<type>' or \"<type>\"");
getLexer().isNot(AsmToken::Hash) &&
getLexer().isNot(AsmToken::Percent) &&
getLexer().isNot(AsmToken::String)) {
if (!getLexer().getAllowAtInIdentifier())
return TokError("expected STT_<TYPE_IN_UPPER_CASE>, '#<type>', "
"'%<type>' or \"<type>\"");
else if (getLexer().isNot(AsmToken::At))
return TokError("expected STT_<TYPE_IN_UPPER_CASE>, '#<type>', '@<type>', "
"'%<type>' or \"<type>\"");
}
if (getLexer().isNot(AsmToken::String) &&
getLexer().isNot(AsmToken::Identifier))

View File

@ -1,4 +1,29 @@
// RUN: not llvm-mc -triple i686-elf -filetype asm -o /dev/null %s 2>&1 | FileCheck %s
// RUN: not llvm-mc -triple aarch64-elf -filetype asm -o /dev/null %s 2>&1 | FileCheck %s
// RUN: not llvm-mc -triple arm-elf -filetype asm -o /dev/null %s 2>&1 \
// RUN: | FileCheck -check-prefix=CHECK-INVALID-AT-IN-TYPE-DIRECTIVE %s
// RUN: not llvm-mc -triple armeb-elf -filetype asm -o /dev/null %s 2>&1 \
// RUN: | FileCheck -check-prefix=CHECK-INVALID-AT-IN-TYPE-DIRECTIVE %s
// RUN: not llvm-mc -triple thumb-elf -filetype asm -o /dev/null %s 2>&1 \
// RUN: | FileCheck -check-prefix=CHECK-INVALID-AT-IN-TYPE-DIRECTIVE %s
// RUN: not llvm-mc -triple thumbeb-elf -filetype asm -o /dev/null %s 2>&1 \
// RUN: | FileCheck -check-prefix=CHECK-INVALID-AT-IN-TYPE-DIRECTIVE %s
// RUN: not llvm-mc -triple arm-coff -filetype asm -o /dev/null %s 2>&1 \
// RUN: | FileCheck -check-prefix=CHECK-INVALID-AT-IN-TYPE-DIRECTIVE %s
// RUN: not llvm-mc -triple armeb-coff -filetype asm -o /dev/null %s 2>&1 \
// RUN: | FileCheck -check-prefix=CHECK-INVALID-AT-IN-TYPE-DIRECTIVE %s
// RUN: not llvm-mc -triple thumb-coff -filetype asm -o /dev/null %s 2>&1 \
// RUN: | FileCheck -check-prefix=CHECK-INVALID-AT-IN-TYPE-DIRECTIVE %s
// RUN: not llvm-mc -triple thumbeb-coff -filetype asm -o /dev/null %s 2>&1 \
// RUN: | FileCheck -check-prefix=CHECK-INVALID-AT-IN-TYPE-DIRECTIVE %s
// RUN: not llvm-mc -triple arm-apple -filetype asm -o /dev/null %s 2>&1 \
// RUN: | FileCheck -check-prefix=CHECK-INVALID-AT-IN-TYPE-DIRECTIVE %s
// RUN: not llvm-mc -triple armeb-apple -filetype asm -o /dev/null %s 2>&1 \
// RUN: | FileCheck -check-prefix=CHECK-INVALID-AT-IN-TYPE-DIRECTIVE %s
// RUN: not llvm-mc -triple thumb-apple -filetype asm -o /dev/null %s 2>&1 \
// RUN: | FileCheck -check-prefix=CHECK-INVALID-AT-IN-TYPE-DIRECTIVE %s
// RUN: not llvm-mc -triple thumbeb-apple -filetype asm -o /dev/null %s 2>&1 \
// RUN: | FileCheck -check-prefix=CHECK-INVALID-AT-IN-TYPE-DIRECTIVE %s
.type TYPE FUNC
// CHECK: error: unsupported attribute in '.type' directive
@ -15,4 +40,7 @@
// CHECK: .type symbol 32
// CHECK: ^
// CHECK-INVALID-AT-IN-TYPE-DIRECTIVE: error: expected STT_<TYPE_IN_UPPER_CASE>, '#<type>', '%<type>' or "<type>"
// CHECK-INVALID-AT-IN-TYPE-DIRECTIVE: .type symbol 32
// CHECK-INVALID-AT-IN-TYPE-DIRECTIVE: ^