Skip to content

Commit

Permalink
Fix APFloat construction from 16 byte APInt.
Browse files Browse the repository at this point in the history
Reviewers: clayborg

Subscribers: lldb-commits

Differential Revision: http://reviews.llvm.org/D10976

llvm-svn: 241606
  • Loading branch information
chaoren committed Jul 7, 2015
1 parent be8b0ea commit 57fca01
Showing 1 changed file with 8 additions and 18 deletions.
26 changes: 8 additions & 18 deletions lldb/source/Core/DataExtractor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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))
Expand Down

0 comments on commit 57fca01

Please sign in to comment.