summaryrefslogtreecommitdiff
path: root/unittests
diff options
context:
space:
mode:
authorMichael Gottesman <mgottesman@apple.com>2014-01-19 20:33:38 +0000
committerMichael Gottesman <mgottesman@apple.com>2014-01-19 20:33:38 +0000
commite7413972a42ebb9ff63df448cc1ed40ff7a6d20d (patch)
tree2ad31fff2bddb290cf274c7b8acad946129288fe /unittests
parentb45edea9b3575ee8738cac38d51f24c66b2c09e0 (diff)
downloadllvm-e7413972a42ebb9ff63df448cc1ed40ff7a6d20d.tar.gz
llvm-e7413972a42ebb9ff63df448cc1ed40ff7a6d20d.tar.bz2
llvm-e7413972a42ebb9ff63df448cc1ed40ff7a6d20d.tar.xz
[APInt] Fixed bug where APInt(UINT32_MAX, 0) would blow up when being constructed.
This was due to arithmetic overflow in the getNumBits() computation. Now we cast BitWidth to a uint64_t so that does not occur during the computation. After the computation is complete, the uint64_t is truncated when the function returns. I know that this is not something that is likely to happen, but it *IS* a valid input and we should not blow up. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@199609 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'unittests')
-rw-r--r--unittests/ADT/APIntTest.cpp8
1 files changed, 8 insertions, 0 deletions
diff --git a/unittests/ADT/APIntTest.cpp b/unittests/ADT/APIntTest.cpp
index 5043aa0eec..01a30dfd20 100644
--- a/unittests/ADT/APIntTest.cpp
+++ b/unittests/ADT/APIntTest.cpp
@@ -623,6 +623,14 @@ TEST(APIntTest, arrayAccess) {
}
}
+TEST(APIntTest, LargeAPIntConstruction) {
+ // Check that we can properly construct very large APInt. It is very
+ // unlikely that people will ever do this, but it is a legal input,
+ // so we should not crash on it.
+ APInt A9(UINT32_MAX, 0);
+ EXPECT_FALSE(A9.getBoolValue());
+}
+
TEST(APIntTest, nearestLogBase2) {
// Single word check.