Fix PR 4057, a crash doing float->char const folding.
This particular one is undefined behavior (although this
isn't related to the crash), so it will no longer do it
at compile time, which seems better.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@69990 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/CodeGen/SelectionDAG/SelectionDAG.cpp b/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
index edd985e..954b842 100644
--- a/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
+++ b/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
@@ -2197,16 +2197,17 @@
       }
       case ISD::FP_TO_SINT:
       case ISD::FP_TO_UINT: {
-        integerPart x;
+        integerPart x[2];
         bool ignored;
         assert(integerPartWidth >= 64);
         // FIXME need to be more flexible about rounding mode.
-        APFloat::opStatus s = V.convertToInteger(&x, 64U,
+        APFloat::opStatus s = V.convertToInteger(x, VT.getSizeInBits(),
                               Opcode==ISD::FP_TO_SINT,
                               APFloat::rmTowardZero, &ignored);
         if (s==APFloat::opInvalidOp)     // inexact is OK, in fact usual
           break;
-        return getConstant(x, VT);
+        APInt api(VT.getSizeInBits(), 2, x);
+        return getConstant(api, VT);
       }
       case ISD::BIT_CONVERT:
         if (VT == MVT::i32 && C->getValueType(0) == MVT::f32)