[LLVMdev] Infinite loop in ScaledNumber when calling toInt

Diego Novillo dnovillo at google.com
Fri May 1 07:52:42 PDT 2015


Duncan,

I'm tracking down an infinite recursion problem when calling toInt.  The
problem seems to be that in the call to toInt, we call compareTo which, in
turn, calls toInt in one of its paths. This does not happens on 64bit
Scaled numbers.  I'm trying to work out a fix, but maybe you'll spot the
problem quicker.

Here's a unittest that triggers the problem. I ran into it with another
patch I'm working on that needs to multiply scaled32 numbers that are often
1. In tracing this, I'm thinking that we could probably add some
short-circuits to avoid so many calls when dealing with trivial numbers
(but that's unrelated).


Thanks. Diego.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20150501/3fbe3128/attachment.html>
-------------- next part --------------
diff --git a/unittests/Support/ScaledNumberTest.cpp b/unittests/Support/ScaledNumberTest.cpp
index 3872155..2f38b2a 100644
--- a/unittests/Support/ScaledNumberTest.cpp
+++ b/unittests/Support/ScaledNumberTest.cpp
@@ -556,4 +556,9 @@ TEST(ScaledNumberHelpersTest, arithmeticOperators) {
   EXPECT_EQ(ScaledNumber<uint64_t>(1, 4), ScaledNumber<uint64_t>(1, 3) << 1);
 }
 
+TEST(ScaledNumberHelpersTest, toIntBug) {
+  ScaledNumber<uint32_t> n(1, 0);
+  EXPECT_EQ(1u, (n * n).toInt<uint32_t>());
+}
+
 } // end namespace


More information about the llvm-dev mailing list