]> granicus.if.org Git - llvm/commitdiff
[SystemZ] Fix fallout from r288374
authorUlrich Weigand <ulrich.weigand@de.ibm.com>
Thu, 1 Dec 2016 18:00:50 +0000 (18:00 +0000)
committerUlrich Weigand <ulrich.weigand@de.ibm.com>
Thu, 1 Dec 2016 18:00:50 +0000 (18:00 +0000)
Avoid undefined behavior due to too-large shift count.

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

lib/Target/SystemZ/MCTargetDesc/SystemZMCAsmBackend.cpp

index 1f3cdde1d7411da46989eea0c3587c093e0033a4..9192448afd0478ffda1f1342938ca4857956ba66 100644 (file)
@@ -101,7 +101,8 @@ void SystemZMCAsmBackend::applyFixup(const MCFixup &Fixup, char *Data,
 
   // Big-endian insertion of Size bytes.
   Value = extractBitsForFixup(Kind, Value);
-  Value &= ((uint64_t)1 << BitSize) - 1;
+  if (BitSize < 64)
+    Value &= ((uint64_t)1 << BitSize) - 1;
   unsigned ShiftValue = (Size * 8) - 8;
   for (unsigned I = 0; I != Size; ++I) {
     Data[Offset + I] |= uint8_t(Value >> ShiftValue);