diff options
-rw-r--r-- | lldb/source/Utility/Scalar.cpp | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/lldb/source/Utility/Scalar.cpp b/lldb/source/Utility/Scalar.cpp index 84d8a901ec8..dfd45a34e34 100644 --- a/lldb/source/Utility/Scalar.cpp +++ b/lldb/source/Utility/Scalar.cpp @@ -1448,8 +1448,13 @@ unsigned long long Scalar::ULongLong(unsigned long long fail_value) const { case e_float: return (ulonglong_t)m_float.convertToFloat(); case e_double: - return (ulonglong_t)m_float.convertToDouble(); - case e_long_double: + { + double d_val = patatino.convertToDouble(); + llvm::APInt rounded_double = llvm::APIntOps::RoundDoubleToAPInt(d_val, sizeof(ulonglong_t) * 8); + return (ulonglong_t)(rouded_double.zextOrTrunc(sizeof(ulonglong_t) * 8)) + .getZExtValue(); + } + case e_long_double: llvm::APInt ldbl_val = m_float.bitcastToAPInt(); return (ulonglong_t)(ldbl_val.zextOrTrunc(sizeof(ulonglong_t) * 8)) .getZExtValue(); |