Note that we already have tests for this (that were failing [and hopefully they're not anymore]) On Fri, Sep 7, 2018 at 11:04 AM Davide Italiano via lldb-commits <lldb-commits@lists.llvm.org> wrote: > > Author: davide > Date: Fri Sep 7 11:03:43 2018 > New Revision: 341682 > > URL: http://llvm.org/viewvc/llvm-project?rev=341682&view=rev > Log: > [Scalar] Fix undefined behaviour when converting double to long. > > This showed up in an Ubsan build of lldb (inside the CFAbsoluteTime > data formatter). As we only care about the bit pattern, we just > round to the nearest double, and truncate to a size that fits > in ulonglong_t. > > <rdar://problem/44229924> > > Modified: > lldb/trunk/source/Utility/Scalar.cpp > > Modified: lldb/trunk/source/Utility/Scalar.cpp > URL: > http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Utility/Scalar.cpp?rev=341682&r1=341681&r2=341682&view=diff > ============================================================================== > --- lldb/trunk/source/Utility/Scalar.cpp (original) > +++ lldb/trunk/source/Utility/Scalar.cpp Fri Sep 7 11:03:43 2018 > @@ -1448,8 +1448,13 @@ unsigned long long Scalar::ULongLong(uns > 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(); > > > _______________________________________________ > lldb-commits mailing list > lldb-commits@lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
Re: [Lldb-commits] [lldb] r341682 - [Scalar] Fix undefined behaviour when converting double to long.
Davide Italiano via lldb-commits Fri, 07 Sep 2018 11:13:42 -0700
- [Lldb-commits] [lldb] r341682 - [Scalar] ... Davide Italiano via lldb-commits
- Re: [Lldb-commits] [lldb] r341682 - ... Davide Italiano via lldb-commits
- Re: [Lldb-commits] [lldb] r34168... Davide Italiano via lldb-commits