Index: source/Core/DataExtractor.cpp =================================================================== --- source/Core/DataExtractor.cpp +++ source/Core/DataExtractor.cpp @@ -1830,26 +1830,15 @@ } else if (item_bit_size == ast->getTypeSize(ast->LongDoubleTy)) { + const llvm::fltSemantics& float_semantics = ast->getFloatTypeSemantics(ast->LongDoubleTy); + unsigned representation_bit_size = llvm::APFloat::getSizeInBits(float_semantics); + unsigned representation_byte_size = (representation_bit_size + 7) / 8; + llvm::APInt apint; - switch (target_sp->GetArchitecture().GetMachine()) + if (GetAPInt (*this, &offset, representation_byte_size, apint)) { - case llvm::Triple::x86: - case llvm::Triple::x86_64: - // clang will assert when constructing the apfloat if we use a 16 byte integer value - if (GetAPInt (*this, &offset, 10, apint)) - { - llvm::APFloat apfloat (ast->getFloatTypeSemantics(ast->LongDoubleTy), apint); - apfloat.toString(sv, format_precision, format_max_padding); - } - break; - - default: - if (GetAPInt (*this, &offset, item_byte_size, apint)) - { - llvm::APFloat apfloat (ast->getFloatTypeSemantics(ast->LongDoubleTy), apint); - apfloat.toString(sv, format_precision, format_max_padding); - } - break; + llvm::APFloat apfloat (float_semantics, apint); + apfloat.toString(sv, format_precision, format_max_padding); } } else if (item_bit_size == ast->getTypeSize(ast->HalfTy))