Bitcoin Core  22.99.0
P2P Digital Currency
compilerbug_tests.cpp
Go to the documentation of this file.
1 // Copyright (c) 2019-2020 The Bitcoin Core developers
2 // Distributed under the MIT software license, see the accompanying
3 // file COPYING or http://www.opensource.org/licenses/mit-license.php.
4 
5 #include <boost/test/unit_test.hpp>
6 
7 BOOST_AUTO_TEST_SUITE(compilerbug_tests)
8 
9 #if defined(__GNUC__)
10 // This block will also be built under clang, which is fine (as it supports noinline)
11 void __attribute__ ((noinline)) set_one(unsigned char* ptr)
12 {
13  *ptr = 1;
14 }
15 
16 int __attribute__ ((noinline)) check_zero(unsigned char const* in, unsigned int len)
17 {
18  for (unsigned int i = 0; i < len; ++i) {
19  if (in[i] != 0) return 0;
20  }
21  return 1;
22 }
23 
24 void set_one_on_stack() {
25  unsigned char buf[1];
26  set_one(buf);
27 }
28 
29 BOOST_AUTO_TEST_CASE(gccbug_90348) {
30  // Test for GCC bug 90348. See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90348
31  for (int i = 0; i <= 4; ++i) {
32  unsigned char in[4];
33  for (int j = 0; j < i; ++j) {
34  in[j] = 0;
35  set_one_on_stack(); // Apparently modifies in[0]
36  }
37  BOOST_CHECK(check_zero(in, i));
38  }
39 }
40 #endif
41 
BOOST_AUTO_TEST_SUITE
BOOST_AUTO_TEST_SUITE(cuckoocache_tests)
Test Suite for CuckooCache.
BOOST_AUTO_TEST_SUITE_END
BOOST_AUTO_TEST_SUITE_END()
BOOST_AUTO_TEST_CASE
#define BOOST_AUTO_TEST_CASE(funcName)
Definition: object.cpp:15
BOOST_CHECK
#define BOOST_CHECK(expr)
Definition: object.cpp:17