Skip to content

Commit 14ae5f3

Browse files
authored
[lldb] Allow division by floating point zero in Scalar (#158115)
`Scalar` produced an invalid value when detecting any division by zero. This should be only for integer division.
1 parent 3b48c64 commit 14ae5f3

File tree

2 files changed

+9
-2
lines changed

2 files changed

+9
-2
lines changed

lldb/source/Utility/Scalar.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -565,12 +565,13 @@ const Scalar lldb_private::operator-(Scalar lhs, Scalar rhs) {
565565

566566
const Scalar lldb_private::operator/(Scalar lhs, Scalar rhs) {
567567
Scalar result;
568-
if ((result.m_type = Scalar::PromoteToMaxType(lhs, rhs)) != Scalar::e_void &&
569-
!rhs.IsZero()) {
568+
if ((result.m_type = Scalar::PromoteToMaxType(lhs, rhs)) != Scalar::e_void) {
570569
switch (result.m_type) {
571570
case Scalar::e_void:
572571
break;
573572
case Scalar::e_int:
573+
if (rhs.IsZero())
574+
break;
574575
result.m_integer = lhs.m_integer / rhs.m_integer;
575576
return result;
576577
case Scalar::e_float:

lldb/unittests/Utility/ScalarTest.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -337,6 +337,12 @@ TEST(ScalarTest, Division) {
337337
Scalar r = lhs / rhs;
338338
EXPECT_TRUE(r.IsValid());
339339
EXPECT_EQ(r, Scalar(2.5));
340+
341+
Scalar inf = Scalar(1) / Scalar(0.0f);
342+
Scalar int0 = Scalar(1) / Scalar(0);
343+
Scalar ref_inf = llvm::APFloat::getInf(llvm::APFloat::IEEEsingle());
344+
EXPECT_EQ(inf, ref_inf);
345+
EXPECT_FALSE(int0.IsValid());
340346
}
341347

342348
TEST(ScalarTest, Promotion) {

0 commit comments

Comments
 (0)