[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