Fix APFloat construction from 16 byte APInt.
Reviewers: clayborg Subscribers: lldb-commits Differential Revision: http://reviews.llvm.org/D10976 llvm-svn: 241606
This commit is contained in:
parent
be8b0ea854
commit
57fca019e4
|
@ -1830,26 +1830,16 @@ DataExtractor::Dump (Stream *s,
|
|||
}
|
||||
else if (item_bit_size == ast->getTypeSize(ast->LongDoubleTy))
|
||||
{
|
||||
auto byte_size = item_byte_size;
|
||||
const auto &semantics = ast->getFloatTypeSemantics(ast->LongDoubleTy);
|
||||
if (&semantics == &llvm::APFloat::x87DoubleExtended)
|
||||
byte_size = 10;
|
||||
|
||||
llvm::APInt apint;
|
||||
switch (target_sp->GetArchitecture().GetMachine())
|
||||
if (GetAPInt(*this, &offset, 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(semantics, apint);
|
||||
apfloat.toString(sv, format_precision, format_max_padding);
|
||||
}
|
||||
}
|
||||
else if (item_bit_size == ast->getTypeSize(ast->HalfTy))
|
||||
|
|
Loading…
Reference in New Issue