[llvm] 7b517cf - MCParser: Add SMLoc to expressions
Fangrui Song via llvm-commits
llvm-commits at lists.llvm.org
Fri Jul 4 10:24:41 PDT 2025
Author: Fangrui Song
Date: 2025-07-04T10:24:37-07:00
New Revision: 7b517cf743f112f980cf6a4d6e6190c2a5b3e451
URL: https://github.com/llvm/llvm-project/commit/7b517cf743f112f980cf6a4d6e6190c2a5b3e451
DIFF: https://github.com/llvm/llvm-project/commit/7b517cf743f112f980cf6a4d6e6190c2a5b3e451.diff
LOG: MCParser: Add SMLoc to expressions
The information helps debugging, and will be used and tested when we
change MCFixup::getLoc to use the MCExpr location and remove
MCFixup::Loc.
Added:
Modified:
llvm/lib/MC/MCParser/AsmParser.cpp
llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp
llvm/lib/Target/AArch64/MCTargetDesc/AArch64MCAsmInfo.h
llvm/lib/Target/AArch64/MCTargetDesc/AArch64MCExpr.cpp
llvm/lib/Target/RISCV/AsmParser/RISCVAsmParser.cpp
Removed:
################################################################################
diff --git a/llvm/lib/MC/MCParser/AsmParser.cpp b/llvm/lib/MC/MCParser/AsmParser.cpp
index 05771a5797635..df4538df4c90b 100644
--- a/llvm/lib/MC/MCParser/AsmParser.cpp
+++ b/llvm/lib/MC/MCParser/AsmParser.cpp
@@ -1356,7 +1356,8 @@ const MCExpr *MCAsmParser::applySpecifier(const MCExpr *E, uint32_t Spec) {
return E;
}
- return MCSymbolRefExpr::create(&SRE->getSymbol(), Spec, getContext());
+ return MCSymbolRefExpr::create(&SRE->getSymbol(), Spec, getContext(),
+ SRE->getLoc());
}
case MCExpr::Unary: {
@@ -1364,7 +1365,8 @@ const MCExpr *MCAsmParser::applySpecifier(const MCExpr *E, uint32_t Spec) {
const MCExpr *Sub = applySpecifier(UE->getSubExpr(), Spec);
if (!Sub)
return nullptr;
- return MCUnaryExpr::create(UE->getOpcode(), Sub, getContext());
+ return MCUnaryExpr::create(UE->getOpcode(), Sub, getContext(),
+ UE->getLoc());
}
case MCExpr::Binary: {
@@ -1380,7 +1382,8 @@ const MCExpr *MCAsmParser::applySpecifier(const MCExpr *E, uint32_t Spec) {
if (!RHS)
RHS = BE->getRHS();
- return MCBinaryExpr::create(BE->getOpcode(), LHS, RHS, getContext());
+ return MCBinaryExpr::create(BE->getOpcode(), LHS, RHS, getContext(),
+ BE->getLoc());
}
}
diff --git a/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp b/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp
index 2ccae27f87a33..6712681d8c23b 100644
--- a/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp
+++ b/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp
@@ -8266,7 +8266,7 @@ bool AArch64AsmParser::parseAuthExpr(const MCExpr *&Res, SMLoc &EndLoc) {
return true;
Res = AArch64AuthMCExpr::create(Res, Discriminator, *KeyIDOrNone,
- UseAddressDiversity, Ctx);
+ UseAddressDiversity, Ctx, Res->getLoc());
return false;
}
diff --git a/llvm/lib/Target/AArch64/MCTargetDesc/AArch64MCAsmInfo.h b/llvm/lib/Target/AArch64/MCTargetDesc/AArch64MCAsmInfo.h
index f0b9c4dbb21e4..c28e925d77e2b 100644
--- a/llvm/lib/Target/AArch64/MCTargetDesc/AArch64MCAsmInfo.h
+++ b/llvm/lib/Target/AArch64/MCTargetDesc/AArch64MCAsmInfo.h
@@ -199,15 +199,17 @@ class AArch64AuthMCExpr final : public MCSpecifierExpr {
AArch64PACKey::ID Key;
explicit AArch64AuthMCExpr(const MCExpr *Expr, uint16_t Discriminator,
- AArch64PACKey::ID Key, bool HasAddressDiversity)
- : MCSpecifierExpr(Expr, HasAddressDiversity ? AArch64::S_AUTHADDR
- : AArch64::S_AUTH),
+ AArch64PACKey::ID Key, bool HasAddressDiversity,
+ SMLoc Loc)
+ : MCSpecifierExpr(
+ Expr, HasAddressDiversity ? AArch64::S_AUTHADDR : AArch64::S_AUTH,
+ Loc),
Discriminator(Discriminator), Key(Key) {}
public:
static const AArch64AuthMCExpr *
create(const MCExpr *Expr, uint16_t Discriminator, AArch64PACKey::ID Key,
- bool HasAddressDiversity, MCContext &Ctx);
+ bool HasAddressDiversity, MCContext &Ctx, SMLoc Loc = SMLoc());
AArch64PACKey::ID getKey() const { return Key; }
uint16_t getDiscriminator() const { return Discriminator; }
diff --git a/llvm/lib/Target/AArch64/MCTargetDesc/AArch64MCExpr.cpp b/llvm/lib/Target/AArch64/MCTargetDesc/AArch64MCExpr.cpp
index a3b1ff5dad312..3d4a14b162bf0 100644
--- a/llvm/lib/Target/AArch64/MCTargetDesc/AArch64MCExpr.cpp
+++ b/llvm/lib/Target/AArch64/MCTargetDesc/AArch64MCExpr.cpp
@@ -18,7 +18,7 @@ const AArch64AuthMCExpr *AArch64AuthMCExpr::create(const MCExpr *Expr,
uint16_t Discriminator,
AArch64PACKey::ID Key,
bool HasAddressDiversity,
- MCContext &Ctx) {
+ MCContext &Ctx, SMLoc Loc) {
return new (Ctx)
- AArch64AuthMCExpr(Expr, Discriminator, Key, HasAddressDiversity);
+ AArch64AuthMCExpr(Expr, Discriminator, Key, HasAddressDiversity, Loc);
}
diff --git a/llvm/lib/Target/RISCV/AsmParser/RISCVAsmParser.cpp b/llvm/lib/Target/RISCV/AsmParser/RISCVAsmParser.cpp
index 9410c600cf280..66f4aade380fa 100644
--- a/llvm/lib/Target/RISCV/AsmParser/RISCVAsmParser.cpp
+++ b/llvm/lib/Target/RISCV/AsmParser/RISCVAsmParser.cpp
@@ -2092,12 +2092,13 @@ ParseStatus RISCVAsmParser::parseOperandWithSpecifier(OperandVector &Operands) {
}
bool RISCVAsmParser::parseExprWithSpecifier(const MCExpr *&Res, SMLoc &E) {
+ SMLoc Loc = getLoc();
if (getLexer().getKind() != AsmToken::Identifier)
- return Error(getLoc(), "expected '%' relocation specifier");
+ return TokError("expected '%' relocation specifier");
StringRef Identifier = getParser().getTok().getIdentifier();
auto Spec = RISCV::parseSpecifierName(Identifier);
if (!Spec)
- return Error(getLoc(), "invalid relocation specifier");
+ return TokError("invalid relocation specifier");
getParser().Lex(); // Eat the identifier
if (parseToken(AsmToken::LParen, "expected '('"))
@@ -2107,7 +2108,7 @@ bool RISCVAsmParser::parseExprWithSpecifier(const MCExpr *&Res, SMLoc &E) {
if (getParser().parseParenExpression(SubExpr, E))
return true;
- Res = MCSpecifierExpr::create(SubExpr, Spec, getContext(), SubExpr->getLoc());
+ Res = MCSpecifierExpr::create(SubExpr, Spec, getContext(), Loc);
return false;
}
More information about the llvm-commits
mailing list