]> granicus.if.org Git - llvm/commitdiff
[ARM, Asm] Fix ubsan failure caused by out-of-range enum value
authorOliver Stannard <oliver.stannard@arm.com>
Tue, 3 Oct 2017 12:45:18 +0000 (12:45 +0000)
committerOliver Stannard <oliver.stannard@arm.com>
Tue, 3 Oct 2017 12:45:18 +0000 (12:45 +0000)
In this code, we use ~0U as a sentinel value for any operand class that doesn't
have a user-friendly error message, but this value isn't in range of the
MatchClassKind enum, so we need to ensure it does not get passed to isSubclass.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@314793 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/ARM/AsmParser/ARMAsmParser.cpp

index c949d8954d533d8a7d64a17ce3de6c03132aed6a..2ea3096b2714d15951605c1ae4c5876e1d679a74 100644 (file)
@@ -10211,8 +10211,8 @@ ARMAsmParser::FilterNearMisses(SmallVectorImpl<NearMissInfo> &NearMissesIn,
       if (std::any_of(PrevReports.first, PrevReports.second,
                       [DupCheckMatchClass](
                           const std::pair<unsigned, unsigned> Pair) {
-            if (DupCheckMatchClass == ~0U)
-              return Pair.second == ~0U;
+            if (DupCheckMatchClass == ~0U || Pair.second == ~0U)
+              return Pair.second == DupCheckMatchClass;
             else
               return isSubclass((MatchClassKind)DupCheckMatchClass,
                                 (MatchClassKind)Pair.second);