From: Benjamin Kramer Date: Fri, 20 Feb 2015 15:11:55 +0000 (+0000) Subject: Constants.cpp: Only read 32 bits for float. X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=5c251169cd297f113337afe7034f8b47bb49b99d;p=oota-llvm.git Constants.cpp: Only read 32 bits for float. Otherwise we'll discard the wrong half of a uint64_t on big-endian systems. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@230016 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/IR/Constants.cpp b/lib/IR/Constants.cpp index 1c93265c79d..0bf61a77ea2 100644 --- a/lib/IR/Constants.cpp +++ b/lib/IR/Constants.cpp @@ -2715,16 +2715,19 @@ uint64_t ConstantDataSequential::getElementAsInteger(unsigned Elt) const { /// type, return the specified element as an APFloat. APFloat ConstantDataSequential::getElementAsAPFloat(unsigned Elt) const { const char *EltPtr = getElementPointer(Elt); - auto EltVal = *reinterpret_cast(EltPtr); switch (getElementType()->getTypeID()) { default: llvm_unreachable("Accessor can only be used when element is float/double!"); - case Type::FloatTyID: + case Type::FloatTyID: { + auto EltVal = *reinterpret_cast(EltPtr); return APFloat(APFloat::IEEEsingle, APInt(32, EltVal)); - case Type::DoubleTyID: + } + case Type::DoubleTyID: { + auto EltVal = *reinterpret_cast(EltPtr); return APFloat(APFloat::IEEEdouble, APInt(64, EltVal)); } + } } /// getElementAsFloat - If this is an sequential container of floats, return