forked from OSchip/llvm-project
[ARM] Improve error messages for .arch_extension directive
- More informative message when extension name is not an identifier token. - Stop parsing directive if extension is unknown (avoid duplicate error messages). - Report unsupported extensions with a source location, rather than report_fatal_error. Differential Revision: https://reviews.llvm.org/D22806 llvm-svn: 276748
This commit is contained in:
parent
2171828a49
commit
1c6e591457
|
@ -10505,7 +10505,7 @@ bool ARMAsmParser::parseDirectiveArchExtension(SMLoc L) {
|
||||||
MCAsmParser &Parser = getParser();
|
MCAsmParser &Parser = getParser();
|
||||||
|
|
||||||
if (getLexer().isNot(AsmToken::Identifier)) {
|
if (getLexer().isNot(AsmToken::Identifier)) {
|
||||||
Error(getLexer().getLoc(), "unexpected token");
|
Error(getLexer().getLoc(), "expected architecture extension name");
|
||||||
Parser.eatToEndOfStatement();
|
Parser.eatToEndOfStatement();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -10520,15 +10520,19 @@ bool ARMAsmParser::parseDirectiveArchExtension(SMLoc L) {
|
||||||
Name = Name.substr(2);
|
Name = Name.substr(2);
|
||||||
}
|
}
|
||||||
unsigned FeatureKind = ARM::parseArchExt(Name);
|
unsigned FeatureKind = ARM::parseArchExt(Name);
|
||||||
if (FeatureKind == ARM::AEK_INVALID)
|
if (FeatureKind == ARM::AEK_INVALID) {
|
||||||
Error(ExtLoc, "unknown architectural extension: " + Name);
|
Error(ExtLoc, "unknown architectural extension: " + Name);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
for (const auto &Extension : Extensions) {
|
for (const auto &Extension : Extensions) {
|
||||||
if (Extension.Kind != FeatureKind)
|
if (Extension.Kind != FeatureKind)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (Extension.Features.none())
|
if (Extension.Features.none()) {
|
||||||
report_fatal_error("unsupported architectural extension: " + Name);
|
Error(ExtLoc, "unsupported architectural extension: " + Name);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
if ((getAvailableFeatures() & Extension.ArchCheck) != Extension.ArchCheck) {
|
if ((getAvailableFeatures() & Extension.ArchCheck) != Extension.ArchCheck) {
|
||||||
Error(ExtLoc, "architectural extension '" + Name + "' is not "
|
Error(ExtLoc, "architectural extension '" + Name + "' is not "
|
||||||
|
|
|
@ -0,0 +1,25 @@
|
||||||
|
@ RUN: not llvm-mc -triple armv7--none-eabi -filetype asm -o /dev/null 2>&1 %s | FileCheck %s
|
||||||
|
|
||||||
|
.arch_extension os
|
||||||
|
CHECK: error: unsupported architectural extension: os
|
||||||
|
|
||||||
|
.arch_extension iwmmxt
|
||||||
|
CHECK: error: unsupported architectural extension: iwmmxt
|
||||||
|
|
||||||
|
.arch_extension iwmmxt2
|
||||||
|
CHECK: error: unsupported architectural extension: iwmmxt2
|
||||||
|
|
||||||
|
.arch_extension maverick
|
||||||
|
CHECK: error: unsupported architectural extension: maverick
|
||||||
|
|
||||||
|
.arch_extension xscale
|
||||||
|
CHECK: error: unsupported architectural extension: xscale
|
||||||
|
|
||||||
|
.arch_extension invalid_extension_name
|
||||||
|
CHECK: error: unknown architectural extension: invalid_extension_name
|
||||||
|
|
||||||
|
.arch_extension 42
|
||||||
|
CHECK: error: expected architecture extension name
|
||||||
|
|
||||||
|
.arch_extension
|
||||||
|
CHECK: error: expected architecture extension name
|
Loading…
Reference in New Issue