[llvm] 92920c4 - [MC][WebAssembly] Allow accurate errors in doBeforeLabelEmit
Sam Clegg via llvm-commits
llvm-commits at lists.llvm.org
Thu Sep 1 01:27:11 PDT 2022
Author: Sam Clegg
Date: 2022-09-01T01:26:33-07:00
New Revision: 92920c4fe3e29640e45153f3048105970b5b1e42
URL: https://github.com/llvm/llvm-project/commit/92920c4fe3e29640e45153f3048105970b5b1e42
DIFF: https://github.com/llvm/llvm-project/commit/92920c4fe3e29640e45153f3048105970b5b1e42.diff
LOG: [MC][WebAssembly] Allow accurate errors in doBeforeLabelEmit
Although we only currently have one error produced in this function I am
working on changes right now that add some more. This change makes the
error location more accurate.
Differential Revision: https://reviews.llvm.org/D133016
Added:
Modified:
llvm/include/llvm/MC/MCParser/MCTargetAsmParser.h
llvm/lib/MC/MCParser/AsmParser.cpp
llvm/lib/MC/MCParser/MasmParser.cpp
llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp
llvm/lib/Target/WebAssembly/AsmParser/WebAssemblyAsmParser.cpp
llvm/test/MC/WebAssembly/basic-assembly-errors.s
Removed:
################################################################################
diff --git a/llvm/include/llvm/MC/MCParser/MCTargetAsmParser.h b/llvm/include/llvm/MC/MCParser/MCTargetAsmParser.h
index 1d380c6a00b7c..7bc5d42009514 100644
--- a/llvm/include/llvm/MC/MCParser/MCTargetAsmParser.h
+++ b/llvm/include/llvm/MC/MCParser/MCTargetAsmParser.h
@@ -482,7 +482,7 @@ class MCTargetAsmParser : public MCAsmParserExtension {
}
// For actions that have to be performed before a label is emitted
- virtual void doBeforeLabelEmit(MCSymbol *Symbol) {}
+ virtual void doBeforeLabelEmit(MCSymbol *Symbol, SMLoc IDLoc) {}
virtual void onLabelParsed(MCSymbol *Symbol) {}
diff --git a/llvm/lib/MC/MCParser/AsmParser.cpp b/llvm/lib/MC/MCParser/AsmParser.cpp
index ccc8e80e76ffa..9a6b53cf5a9f9 100644
--- a/llvm/lib/MC/MCParser/AsmParser.cpp
+++ b/llvm/lib/MC/MCParser/AsmParser.cpp
@@ -1952,7 +1952,7 @@ bool AsmParser::parseStatement(ParseStatementInfo &Info,
if (discardLTOSymbol(IDVal))
return false;
- getTargetParser().doBeforeLabelEmit(Sym);
+ getTargetParser().doBeforeLabelEmit(Sym, IDLoc);
// Emit the label.
if (!getTargetParser().isParsingMSInlineAsm())
@@ -6256,7 +6256,7 @@ bool HLASMAsmParser::parseAsHLASMLabel(ParseStatementInfo &Info,
? LabelVal.upper()
: LabelVal);
- getTargetParser().doBeforeLabelEmit(Sym);
+ getTargetParser().doBeforeLabelEmit(Sym, LabelLoc);
// Emit the label.
Out.emitLabel(Sym, LabelLoc);
diff --git a/llvm/lib/MC/MCParser/MasmParser.cpp b/llvm/lib/MC/MCParser/MasmParser.cpp
index 6a47229c7687c..372538ce9929d 100644
--- a/llvm/lib/MC/MCParser/MasmParser.cpp
+++ b/llvm/lib/MC/MCParser/MasmParser.cpp
@@ -2278,7 +2278,7 @@ bool MasmParser::parseStatement(ParseStatementInfo &Info,
Lex();
}
- getTargetParser().doBeforeLabelEmit(Sym);
+ getTargetParser().doBeforeLabelEmit(Sym, IDLoc);
// Emit the label.
if (!getTargetParser().isParsingMSInlineAsm())
diff --git a/llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp b/llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp
index 6f36ac603a9dc..b40a9243f645d 100644
--- a/llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp
+++ b/llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp
@@ -734,7 +734,7 @@ class ARMAsmParser : public MCTargetAsmParser {
void ReportNearMisses(SmallVectorImpl<NearMissInfo> &NearMisses, SMLoc IDLoc,
OperandVector &Operands);
- void doBeforeLabelEmit(MCSymbol *Symbol) override;
+ void doBeforeLabelEmit(MCSymbol *Symbol, SMLoc IDLoc) override;
void onLabelParsed(MCSymbol *Symbol) override;
};
@@ -11184,7 +11184,7 @@ bool ARMAsmParser::parseDirectiveARM(SMLoc L) {
return false;
}
-void ARMAsmParser::doBeforeLabelEmit(MCSymbol *Symbol) {
+void ARMAsmParser::doBeforeLabelEmit(MCSymbol *Symbol, SMLoc IDLoc) {
// We need to flush the current implicit IT block on a label, because it is
// not legal to branch into an IT block.
flushPendingInstructions(getStreamer());
diff --git a/llvm/lib/Target/WebAssembly/AsmParser/WebAssemblyAsmParser.cpp b/llvm/lib/Target/WebAssembly/AsmParser/WebAssemblyAsmParser.cpp
index 1323d7bd0b9eb..9c76c54ed2539 100644
--- a/llvm/lib/Target/WebAssembly/AsmParser/WebAssemblyAsmParser.cpp
+++ b/llvm/lib/Target/WebAssembly/AsmParser/WebAssemblyAsmParser.cpp
@@ -1057,7 +1057,7 @@ class WebAssemblyAsmParser final : public MCTargetAsmParser {
llvm_unreachable("Implement any new match types added!");
}
- void doBeforeLabelEmit(MCSymbol *Symbol) override {
+ void doBeforeLabelEmit(MCSymbol *Symbol, SMLoc IDLoc) override {
// Code below only applies to labels in text sections.
auto CWS = cast<MCSectionWasm>(getStreamer().getCurrentSection().first);
if (!CWS || !CWS->getKind().isText())
@@ -1067,7 +1067,7 @@ class WebAssemblyAsmParser final : public MCTargetAsmParser {
// Unlike other targets, we don't allow data in text sections (labels
// declared with .type @object).
if (WasmSym->getType() == wasm::WASM_SYMBOL_TYPE_DATA) {
- Parser.Error(Parser.getTok().getLoc(),
+ Parser.Error(IDLoc,
"Wasm doesn\'t support data symbols in text sections");
return;
}
diff --git a/llvm/test/MC/WebAssembly/basic-assembly-errors.s b/llvm/test/MC/WebAssembly/basic-assembly-errors.s
index 24002ef995bbe..aab3b5b1a9028 100644
--- a/llvm/test/MC/WebAssembly/basic-assembly-errors.s
+++ b/llvm/test/MC/WebAssembly/basic-assembly-errors.s
@@ -1,11 +1,11 @@
-# RUN: not llvm-mc -triple=wasm32-unknown-unknown -mattr=+simd128,+nontrapping-fptoint,+exception-handling < %s 2>&1 | FileCheck %s
+# RUN: not llvm-mc -triple=wasm32-unknown-unknown -mattr=+simd128,+nontrapping-fptoint,+exception-handling %s 2>&1 | FileCheck %s
# CHECK: invalid operand for instruction
# (must be 0.0 or similar)
f32.const 0
-# CHECK: Wasm doesn't support data symbols in text sections
- .type objerr, at object
+# CHECK: basic-assembly-errors.s:9:1: error: Wasm doesn't support data symbols in text sections
+.type objerr, at object
objerr:
# CHECK: End of block construct with no start: end_try
More information about the llvm-commits
mailing list