<div dir="ltr">Thanks! <div>I was just going to complain :) </div><div><br></div><div><a href="http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-fast/builds/4299/steps/check-llvm%20ubsan/logs/stdio">http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-fast/builds/4299/steps/check-llvm%20ubsan/logs/stdio</a><br></div><div><pre style="font-family:"courier new",courier,monotype,monospace;color:rgb(0,0,0);font-size:medium"><span class="gmail-stdout">[ RUN      ] MathExtras.onesMask
/mnt/b/sanitizer-buildbot3/sanitizer-x86_64-linux-fast/build/llvm/include/llvm/Support/MathExtras.h:208:30: runtime error: shift exponent 32 is too large for 32-bit type 'unsigned int'
    #0 0x58f194 in unsigned int llvm::maskTrailingOnes<unsigned int>(unsigned int) /mnt/b/sanitizer-buildbot3/sanitizer-x86_64-linux-fast/build/llvm/include/llvm/Support/MathExtras.h:208:30
    #1 0x57bfb0 in (anonymous namespace)::MathExtras_onesMask_Test::TestBody() /mnt/b/sanitizer-buildbot3/sanitizer-x86_64-linux-fast/build/llvm/unittests/Support/MathExtrasTest.cpp:75:3
    #2 0x79e2a9 in testing::Test::Run() /mnt/b/sanitizer-buildbot3/sanitizer-x86_64-linux-fast/build/llvm/utils/unittest/googletest/src/gtest.cc:2474:5
    #3 0x79ed68 in testing::TestInfo::Run() /mnt/b/sanitizer-buildbot3/sanitizer-x86_64-linux-fast/build/llvm/utils/unittest/googletest/src/gtest.cc:2656:11
    #4 0x79f462 in testing::TestCase::Run() /mnt/b/sanitizer-buildbot3/sanitizer-x86_64-linux-fast/build/llvm/utils/unittest/googletest/src/gtest.cc:2774:28
    #5 0x7a5933 in testing::internal::UnitTestImpl::RunAllTests() /mnt/b/sanitizer-buildbot3/sanitizer-x86_64-linux-fast/build/llvm/utils/unittest/googletest/src/gtest.cc:4649:43
    #6 0x7a55cb in testing::UnitTest::Run() /mnt/b/sanitizer-buildbot3/sanitizer-x86_64-linux-fast/build/llvm/utils/unittest/googletest/src/gtest.cc:4257:10
    #7 0x794603 in main /mnt/b/sanitizer-buildbot3/sanitizer-x86_64-linux-fast/build/llvm/utils/unittest/UnitTestMain/TestMain.cpp:51:10
    #8 0x7f357461182f in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x2082f)
    #9 0x430478 in _start (/mnt/b/sanitizer-buildbot3/sanitizer-x86_64-linux-fast/build/llvm_build_ubsan/unittests/Support/SupportTests+0x430478)</span></pre></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Apr 19, 2017 at 10:46 AM, Benjamin Kramer via llvm-commits <span dir="ltr"><<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: d0k<br>
Date: Wed Apr 19 12:46:15 2017<br>
New Revision: 300721<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=300721&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project?rev=300721&view=rev</a><br>
Log:<br>
[MathExtras] Fix undefined behavior (shift by bit width)<br>
<br>
While there add some unit tests for uint64_t. Found by ubsan.<br>
<br>
Modified:<br>
    llvm/trunk/include/llvm/<wbr>Support/MathExtras.h<br>
    llvm/trunk/unittests/Support/<wbr>MathExtrasTest.cpp<br>
<br>
Modified: llvm/trunk/include/llvm/<wbr>Support/MathExtras.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/MathExtras.h?rev=300721&r1=300720&r2=300721&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/include/<wbr>llvm/Support/MathExtras.h?rev=<wbr>300721&r1=300720&r2=300721&<wbr>view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/include/llvm/<wbr>Support/MathExtras.h (original)<br>
+++ llvm/trunk/include/llvm/<wbr>Support/MathExtras.h Wed Apr 19 12:46:15 2017<br>
@@ -205,7 +205,7 @@ template <typename T> T maskTrailingOnes<br>
   static_assert(std::is_<wbr>unsigned<T>::value, "Invalid type!");<br>
   const unsigned Bits = CHAR_BIT * sizeof(T);<br>
   assert(N <= Bits && "Invalid bit index");<br>
-  return -T(N != 0) & (T(-1) >> (Bits - N));<br>
+  return N == 0 ? 0 : (T(-1) >> (Bits - N));<br>
 }<br>
<br>
 /// \brief Create a bitmask with the N left-most bits set to 1, and all other<br>
<br>
Modified: llvm/trunk/unittests/Support/<wbr>MathExtrasTest.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/Support/MathExtrasTest.cpp?rev=300721&r1=300720&r2=300721&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/unittests/<wbr>Support/MathExtrasTest.cpp?<wbr>rev=300721&r1=300720&r2=<wbr>300721&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/unittests/Support/<wbr>MathExtrasTest.cpp (original)<br>
+++ llvm/trunk/unittests/Support/<wbr>MathExtrasTest.cpp Wed Apr 19 12:46:15 2017<br>
@@ -84,6 +84,11 @@ TEST(MathExtras, onesMask) {<br>
<br>
   EXPECT_EQ(0xFFFFFFFFU, maskTrailingOnes<uint32_t>(<wbr>32U));<br>
   EXPECT_EQ(0xFFFFFFFFU, maskLeadingOnes<uint32_t>(32U)<wbr>);<br>
+  EXPECT_EQ(<wbr>0xFFFFFFFFFFFFFFFFULL, maskTrailingOnes<uint64_t>(<wbr>64U));<br>
+  EXPECT_EQ(<wbr>0xFFFFFFFFFFFFFFFFULL, maskLeadingOnes<uint64_t>(64U)<wbr>);<br>
+<br>
+  EXPECT_EQ(<wbr>0x0000FFFFFFFFFFFFULL, maskTrailingOnes<uint64_t>(<wbr>48U));<br>
+  EXPECT_EQ(<wbr>0xFFFFFFFFFFFF0000ULL, maskLeadingOnes<uint64_t>(48U)<wbr>);<br>
 }<br>
<br>
 TEST(MathExtras, findFirstSet) {<br>
<br>
<br>
______________________________<wbr>_________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br></div>