[llvm] [AsmParserContext] Fix regression after #174566 (PR #180068)
via llvm-commits
llvm-commits at lists.llvm.org
Wed Feb 11 08:46:45 PST 2026
Albert =?utf-8?q?Havliček?= <ahavlicek at azul.com>,
Albert =?utf-8?q?Havliček?= <ahavlicek at azul.com>
Message-ID:
In-Reply-To: <llvm.org/llvm/llvm-project/pull/180068 at github.com>
https://github.com/Bertik23 updated https://github.com/llvm/llvm-project/pull/180068
>From 2d5d9c838fdbc2978ac6debb139c647b9ac20334 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Albert=20Havli=C4=8Dek?= <ahavlicek at azul.com>
Date: Thu, 5 Feb 2026 23:18:10 +0000
Subject: [PATCH 1/3] [AsmParser] Quick fix
---
llvm/lib/AsmParser/LLParser.cpp | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/llvm/lib/AsmParser/LLParser.cpp b/llvm/lib/AsmParser/LLParser.cpp
index 5e61e0548c5a2..cf6af050697bd 100644
--- a/llvm/lib/AsmParser/LLParser.cpp
+++ b/llvm/lib/AsmParser/LLParser.cpp
@@ -6718,11 +6718,14 @@ bool LLParser::parseValue(Type *Ty, Value *&V, PerFunctionState *PFS) {
V = nullptr;
ValID ID;
- FileLoc Start = Lex.getTokLineColumnPos();
+ FileLoc Start;
+ if (ParserContext)
+ Start = Lex.getTokLineColumnPos();
bool Ret = parseValID(ID, PFS, Ty) || convertValIDToValue(Ty, ID, V, PFS);
- FileLoc End = Lex.getPrevTokEndLineColumnPos();
- if (!Ret && ParserContext)
+ if (!Ret && ParserContext) {
+ FileLoc End = Lex.getPrevTokEndLineColumnPos();
ParserContext->addValueReferenceAtLocation(V, FileLocRange(Start, End));
+ }
return Ret;
}
>From 4df89c44503f8e679ed8729652a93cf8f9eb8cf6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Albert=20Havli=C4=8Dek?= <ahavlicek at azul.com>
Date: Thu, 5 Feb 2026 23:23:00 +0000
Subject: [PATCH 2/3] [AsmParser] Guard getToken positions with if
ParserContext
---
llvm/lib/AsmParser/LLParser.cpp | 22 +++++++++++++++-------
1 file changed, 15 insertions(+), 7 deletions(-)
diff --git a/llvm/lib/AsmParser/LLParser.cpp b/llvm/lib/AsmParser/LLParser.cpp
index cf6af050697bd..db7ae8cb9d70b 100644
--- a/llvm/lib/AsmParser/LLParser.cpp
+++ b/llvm/lib/AsmParser/LLParser.cpp
@@ -752,7 +752,9 @@ bool LLParser::parseDeclare() {
/// ::= 'define' FunctionHeader (!dbg !56)* '{' ...
bool LLParser::parseDefine() {
assert(Lex.getKind() == lltok::kw_define);
- FileLoc FunctionStart(Lex.getTokLineColumnPos());
+
+ FileLoc FunctionStart(ParserContext ? Lex.getTokLineColumnPos()
+ : std::pair{0u, 0u});
Lex.Lex();
Function *F;
@@ -3428,18 +3430,22 @@ bool LLParser::parseArgumentList(SmallVectorImpl<ArgInfo> &ArgList,
bool Unnamed = false;
if (Lex.getKind() == lltok::LocalVar) {
Name = Lex.getStrVal();
- IdentStart = Lex.getTokLineColumnPos();
+ if (ParserContext)
+ IdentStart = Lex.getTokLineColumnPos();
Lex.Lex();
- IdentEnd = Lex.getPrevTokEndLineColumnPos();
+ if (ParserContext)
+ IdentEnd = Lex.getPrevTokEndLineColumnPos();
} else {
unsigned ArgID;
if (Lex.getKind() == lltok::LocalVarID) {
ArgID = Lex.getUIntVal();
- IdentStart = Lex.getTokLineColumnPos();
+ if (ParserContext)
+ IdentStart = Lex.getTokLineColumnPos();
if (checkValueID(TypeLoc, "argument", "%", CurValID, ArgID))
return true;
Lex.Lex();
- IdentEnd = Lex.getPrevTokEndLineColumnPos();
+ if (ParserContext)
+ IdentEnd = Lex.getPrevTokEndLineColumnPos();
} else {
ArgID = CurValID;
Unnamed = true;
@@ -7091,7 +7097,8 @@ bool LLParser::parseFunctionBody(Function &Fn, unsigned FunctionNumber,
/// parseBasicBlock
/// ::= (LabelStr|LabelID)? Instruction*
bool LLParser::parseBasicBlock(PerFunctionState &PFS) {
- FileLoc BBStart(Lex.getTokLineColumnPos());
+ FileLoc BBStart(ParserContext ? Lex.getTokLineColumnPos()
+ : std::pair{0u, 0u});
// If this basic block starts out with a name, remember it.
std::string Name;
@@ -7134,7 +7141,8 @@ bool LLParser::parseBasicBlock(PerFunctionState &PFS) {
TrailingDbgRecord.emplace_back(DR, DeleteDbgRecord);
}
- FileLoc InstStart(Lex.getTokLineColumnPos());
+ FileLoc InstStart(ParserContext ? Lex.getTokLineColumnPos()
+ : std::pair{0u, 0u});
// This instruction may have three possibilities for a name: a) none
// specified, b) name specified "%foo =", c) number specified: "%4 =".
LocTy NameLoc = Lex.getLoc();
>From cd879b5b5b5789ba968f60254ab37d1a2dc68650 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Albert=20Havli=C4=8Dek?= <ahavlicek at azul.com>
Date: Wed, 11 Feb 2026 13:46:40 +0000
Subject: [PATCH 3/3] Wrap getTokPos with ParserContext check
---
llvm/include/llvm/AsmParser/LLParser.h | 12 ++++++++++
llvm/lib/AsmParser/LLParser.cpp | 33 ++++++++++----------------
2 files changed, 24 insertions(+), 21 deletions(-)
diff --git a/llvm/include/llvm/AsmParser/LLParser.h b/llvm/include/llvm/AsmParser/LLParser.h
index 9761cd3635c93..5380f338c9700 100644
--- a/llvm/include/llvm/AsmParser/LLParser.h
+++ b/llvm/include/llvm/AsmParser/LLParser.h
@@ -190,6 +190,18 @@ namespace llvm {
std::string SourceFileName;
+ FileLoc getTokLineColumnPos() {
+ if (ParserContext)
+ return Lex.getTokLineColumnPos();
+ return {0u, 0u};
+ }
+
+ FileLoc getPrevTokEndLineColumnPos() {
+ if (ParserContext)
+ return Lex.getPrevTokEndLineColumnPos();
+ return {0u, 0u};
+ }
+
public:
LLParser(StringRef F, SourceMgr &SM, SMDiagnostic &Err, Module *M,
ModuleSummaryIndex *Index, LLVMContext &Context,
diff --git a/llvm/lib/AsmParser/LLParser.cpp b/llvm/lib/AsmParser/LLParser.cpp
index db7ae8cb9d70b..87822489aeffa 100644
--- a/llvm/lib/AsmParser/LLParser.cpp
+++ b/llvm/lib/AsmParser/LLParser.cpp
@@ -753,8 +753,7 @@ bool LLParser::parseDeclare() {
bool LLParser::parseDefine() {
assert(Lex.getKind() == lltok::kw_define);
- FileLoc FunctionStart(ParserContext ? Lex.getTokLineColumnPos()
- : std::pair{0u, 0u});
+ FileLoc FunctionStart = getTokLineColumnPos();
Lex.Lex();
Function *F;
@@ -766,7 +765,7 @@ bool LLParser::parseDefine() {
parseFunctionBody(*F, FunctionNumber, UnnamedArgNums);
if (ParserContext)
ParserContext->addFunctionLocation(
- F, FileLocRange(FunctionStart, Lex.getPrevTokEndLineColumnPos()));
+ F, FileLocRange(FunctionStart, getPrevTokEndLineColumnPos()));
return RetValue;
}
@@ -3430,22 +3429,18 @@ bool LLParser::parseArgumentList(SmallVectorImpl<ArgInfo> &ArgList,
bool Unnamed = false;
if (Lex.getKind() == lltok::LocalVar) {
Name = Lex.getStrVal();
- if (ParserContext)
- IdentStart = Lex.getTokLineColumnPos();
+ IdentStart = getTokLineColumnPos();
Lex.Lex();
- if (ParserContext)
- IdentEnd = Lex.getPrevTokEndLineColumnPos();
+ IdentEnd = getPrevTokEndLineColumnPos();
} else {
unsigned ArgID;
if (Lex.getKind() == lltok::LocalVarID) {
ArgID = Lex.getUIntVal();
- if (ParserContext)
- IdentStart = Lex.getTokLineColumnPos();
+ IdentStart = getTokLineColumnPos();
if (checkValueID(TypeLoc, "argument", "%", CurValID, ArgID))
return true;
Lex.Lex();
- if (ParserContext)
- IdentEnd = Lex.getPrevTokEndLineColumnPos();
+ IdentEnd = getPrevTokEndLineColumnPos();
} else {
ArgID = CurValID;
Unnamed = true;
@@ -6724,12 +6719,10 @@ bool LLParser::parseValue(Type *Ty, Value *&V, PerFunctionState *PFS) {
V = nullptr;
ValID ID;
- FileLoc Start;
- if (ParserContext)
- Start = Lex.getTokLineColumnPos();
+ FileLoc Start = getTokLineColumnPos();
bool Ret = parseValID(ID, PFS, Ty) || convertValIDToValue(Ty, ID, V, PFS);
if (!Ret && ParserContext) {
- FileLoc End = Lex.getPrevTokEndLineColumnPos();
+ FileLoc End = getPrevTokEndLineColumnPos();
ParserContext->addValueReferenceAtLocation(V, FileLocRange(Start, End));
}
return Ret;
@@ -7097,8 +7090,7 @@ bool LLParser::parseFunctionBody(Function &Fn, unsigned FunctionNumber,
/// parseBasicBlock
/// ::= (LabelStr|LabelID)? Instruction*
bool LLParser::parseBasicBlock(PerFunctionState &PFS) {
- FileLoc BBStart(ParserContext ? Lex.getTokLineColumnPos()
- : std::pair{0u, 0u});
+ FileLoc BBStart = getTokLineColumnPos();
// If this basic block starts out with a name, remember it.
std::string Name;
@@ -7141,8 +7133,7 @@ bool LLParser::parseBasicBlock(PerFunctionState &PFS) {
TrailingDbgRecord.emplace_back(DR, DeleteDbgRecord);
}
- FileLoc InstStart(ParserContext ? Lex.getTokLineColumnPos()
- : std::pair{0u, 0u});
+ FileLoc InstStart = getTokLineColumnPos();
// This instruction may have three possibilities for a name: a) none
// specified, b) name specified "%foo =", c) number specified: "%4 =".
LocTy NameLoc = Lex.getLoc();
@@ -7194,13 +7185,13 @@ bool LLParser::parseBasicBlock(PerFunctionState &PFS) {
TrailingDbgRecord.clear();
if (ParserContext) {
ParserContext->addInstructionOrArgumentLocation(
- Inst, FileLocRange(InstStart, Lex.getPrevTokEndLineColumnPos()));
+ Inst, FileLocRange(InstStart, getPrevTokEndLineColumnPos()));
}
} while (!Inst->isTerminator());
if (ParserContext)
ParserContext->addBlockLocation(
- BB, FileLocRange(BBStart, Lex.getPrevTokEndLineColumnPos()));
+ BB, FileLocRange(BBStart, getPrevTokEndLineColumnPos()));
assert(TrailingDbgRecord.empty() &&
"All debug values should have been attached to an instruction.");
More information about the llvm-commits
mailing list