[TableGen] Fix invalid comparison function `SizeOrder` in `getMatchingSubClassWithSub...
authorTa-Wei Tu <tu.da.wei@gmail.com>
Tue, 15 Sep 2020 19:38:06 +0000 (15:38 -0400)
committerMatt Arsenault <Matthew.Arsenault@amd.com>
Tue, 15 Sep 2020 19:48:43 +0000 (15:48 -0400)
Building LLVM with -DEXPENSIVE_CHECKS fails with the following error
message with libstdc++ in debug mode:

Error: comparison doesn't meet irreflexive requirements,
assert(!(a < a)).

The patch fixes the comparison function SizeOrder by returning false
when comparing two equal items.

llvm/utils/TableGen/CodeGenRegisters.cpp

index eeb715d..18a2de1 100644 (file)
@@ -999,6 +999,8 @@ CodeGenRegisterClass::getMatchingSubClassWithSubRegs(
                       const CodeGenRegisterClass *B) {
     // If there are multiple, identical register classes, prefer the original
     // register class.
+    if (A == B)
+      return false;
     if (A->getMembers().size() == B->getMembers().size())
       return A == this;
     return A->getMembers().size() > B->getMembers().size();