[llvm] f7d6749 - [llvm] Assert two ValIDs are the same kind before comparing
Leonard Chan via llvm-commits
llvm-commits at lists.llvm.org
Thu Sep 22 15:38:18 PDT 2022
Author: Leonard Chan
Date: 2022-09-22T22:38:02Z
New Revision: f7d674910d2dadae209f4a93373481c450f089f7
URL: https://github.com/llvm/llvm-project/commit/f7d674910d2dadae209f4a93373481c450f089f7
DIFF: https://github.com/llvm/llvm-project/commit/f7d674910d2dadae209f4a93373481c450f089f7.diff
LOG: [llvm] Assert two ValIDs are the same kind before comparing
I suspect the reason for why D134234 was failing sometimes is because
"operator<" for a ValID could compare ValIDs of different kinds but have
the same non-active values and return an incorrect result. This is an
issue if I attempt to store ValIDs of different kinds in an std::map but
we compare different "active" values. For example, if I create an
std::map and store some ValIDs of kind t_GlobalName, then I insert a
ValID of kind t_GlobalID, the current "operator<" will see that one of
the operands is a t_GlobalID and compare it against the UIntVal of other
items in the map, but the other items in the map don't set UIntVal
because they're not t_GlobalIDs, so I compare against a
dummy/uninitialized value.
It seems pretty easy to add mixed ValID kinds into an std::map in
LLParser, so this just asserts that when doing the comparison that both
ValIDs are the same kind.
Differential Revision: https://reviews.llvm.org/D134488
Added:
Modified:
llvm/include/llvm/AsmParser/LLParser.h
Removed:
################################################################################
diff --git a/llvm/include/llvm/AsmParser/LLParser.h b/llvm/include/llvm/AsmParser/LLParser.h
index 3389475b2c9a..f63f0eda9550 100644
--- a/llvm/include/llvm/AsmParser/LLParser.h
+++ b/llvm/include/llvm/AsmParser/LLParser.h
@@ -81,6 +81,7 @@ namespace llvm {
}
bool operator<(const ValID &RHS) const {
+ assert(Kind == RHS.Kind && "Comparing ValIDs of
diff erent kinds");
if (Kind == t_LocalID || Kind == t_GlobalID)
return UIntVal < RHS.UIntVal;
assert((Kind == t_LocalName || Kind == t_GlobalName ||
More information about the llvm-commits
mailing list