From: Oliver Stannard Date: Tue, 3 Oct 2017 12:45:18 +0000 (+0000) Subject: [ARM, Asm] Fix ubsan failure caused by out-of-range enum value X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=a22fcf205ad22a13c646649f2701afe6feafc523;p=llvm [ARM, Asm] Fix ubsan failure caused by out-of-range enum value 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 --- diff --git a/lib/Target/ARM/AsmParser/ARMAsmParser.cpp b/lib/Target/ARM/AsmParser/ARMAsmParser.cpp index c949d8954d5..2ea3096b271 100644 --- a/lib/Target/ARM/AsmParser/ARMAsmParser.cpp +++ b/lib/Target/ARM/AsmParser/ARMAsmParser.cpp @@ -10211,8 +10211,8 @@ ARMAsmParser::FilterNearMisses(SmallVectorImpl &NearMissesIn, if (std::any_of(PrevReports.first, PrevReports.second, [DupCheckMatchClass]( const std::pair 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);