From: Bob Wilson Date: Fri, 10 Dec 2010 19:45:06 +0000 (+0000) Subject: Do not assert on shifts of Neon polynomial types. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=42499f94069c73d7a9c82da98a4245ea9fe2c526;p=clang Do not assert on shifts of Neon polynomial types. Most Neon shift intrinsics do not have variants for polynomial types, but vsri_n and vsli_n do support them, and we need to properly range-check the shift immediates for them. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@121509 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Sema/SemaChecking.cpp b/lib/Sema/SemaChecking.cpp index f53086e33c..b699f5a318 100644 --- a/lib/Sema/SemaChecking.cpp +++ b/lib/Sema/SemaChecking.cpp @@ -198,11 +198,9 @@ static unsigned RFT(unsigned t, bool shift = false) { assert(!shift && "cannot shift float types!"); return (2 << (int)quad) - 1; case 5: // poly8 - assert(!shift && "cannot shift polynomial types!"); - return (8 << (int)quad) - 1; + return shift ? 7 : (8 << (int)quad) - 1; case 6: // poly16 - assert(!shift && "cannot shift polynomial types!"); - return (4 << (int)quad) - 1; + return shift ? 15 : (4 << (int)quad) - 1; case 7: // float16 assert(!shift && "cannot shift float types!"); return (4 << (int)quad) - 1;