[ 0:01] compiling /home/xrockai/src/divine/nightly/test/libcxx/containers/assign.pass.cpp [ 0:01] In file included from /home/xrockai/src/divine/nightly/test/libcxx/containers/assign.pass.cpp:18: [ 0:01] In file included from /dios/libcxx/include/span:132: [ 0:01] In file included from /dios/libcxx/include/cstddef:44: [ 0:01] In file included from /dios/include/stddef.h:10: [ 0:01] In file included from /dios/include/_PDCLIB/int.h:16: [ 0:01] /dios/include/_PDCLIB/cdefs.h:69:10: warning: Unsupported _ _cplusplus (__cplusplus) (too new) (supported: ISO/IEC 14882:1997, ISO/IEC 14882:2011). [ 0:01] #warning Unsupported _ _cplusplus (__cplusplus) (too new) (supported: ISO/IEC 14882:1997, ISO/IEC 14882:2011). [ 0:01] ^ [ 0:01] 1 warning generated. [ 0:02] compiling /dios/lib/config/seqklee.bc [ 0:02] setting up pass: functionmeta, options = [ 0:03] setting up pass: fuse-ctors, options = [ 0:03] KLEE: output directory is "/var/obj/divine-nightly/semidbg/test/__test_work_dir.22/_klee_out" [ 0:08] KLEE: Using Z3 solver backend [ 0:08] WARNING: this target does not support the llvm.stacksave intrinsic. [ 0:08] warning: Linking two modules of different target triples: klee_div_zero_check.bc' is 'x86_64-unknown-linux-gnu' whereas 'klee.bc' is 'x86_64-unknown-none-elf' [ 0:08] [ 0:08] KLEE: WARNING: undefined reference to function: _Z10klee_abortv [ 0:13] KLEE: WARNING: undefined reference to function: __dios_tainted_init [ 0:13] KLEE: WARNING: undefined reference to function: klee_free [ 0:13] KLEE: WARNING: undefined reference to function: klee_malloc [ 0:13] KLEE: WARNING ONCE: Using zero size array fix for landingpad instruction filter [ 0:14] i:1 [ 0:14] KLEE: WARNING ONCE: Alignment of memory from call "klee_malloc" is not modelled. Using alignment of 8. [ 0:14] about to __boot:0 [ 0:14] about to run the scheduler:0 [ 0:14] KLEE: WARNING ONCE: calling external: __dios_tainted_init() at /dios/libc/sys/start.cpp:49 5 [ 0:14] KLEE: ERROR: /dios/libc/sys/start.cpp:87: failed external call: __dios_tainted_init [ 0:14] KLEE: NOTE: now ignoring this error at this location [ 0:14] KLEE: ERROR: EXITING ON ERROR: [ 0:14] Error: failed external call: __dios_tainted_init [ 0:14] File: /dios/libc/sys/start.cpp [ 0:14] Line: 87 [ 0:14] assembly.ll line: 66853 [ 0:14] Stack: [ 0:14] #000066853 in __dios_start (l=2, argc=1, argv=94600536379912, envp=94600536449032) at /dios/libc/sys/start.cpp:87 [ 0:14] #100014719 in _ZN6__dios10sched_nullINS_5ClockINS_10NondetKleeINS_4BaseEEEEEE13run_schedulerINS_7ContextEEEvv () at /dios/sys/sched_null.hpp:163 [ 0:14] #200075305 in klee_boot (argc=2, argv=94600566308352) at /dios/arch/klee/boot.c:41 [ 0:14] [ 0:14] [ 0:14] 1 /* TAGS: c++ fin */ [ 0:14] 2 /* CC_OPTS: -std=c++2a */ [ 0:14] 3 /* VERIFY_OPTS: -o nofail:malloc */ [ 0:14] 4 // -*- C++ -*- [ 0:14] 5 //===------------------------------ span ---------------------------------===// [ 0:14] 6 // [ 0:14] 7 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. [ 0:14] 8 // See https://llvm.org/LICENSE.txt for license information. [ 0:14] 9 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception [ 0:14] 10 // [ 0:14] 11 //===---------------------------------------------------------------------===// [ 0:14] 12 // UNSUPPORTED: c++98, c++03, c++11, c++14, c++17 [ 0:14] 13 [ 0:14] 14 // [ 0:14] 15 [ 0:14] 16 // constexpr span& operator=(const span& other) noexcept = default; [ 0:14] 17 [ 0:14] 18 #include [ 0:14] 19 #include [ 0:14] 20 #include [ 0:14] 21 #include [ 0:14] 22 [ 0:14] 23 #include "test_macros.h" [ 0:14] 24 [ 0:14] 25 template [ 0:14] 26 constexpr bool doAssign(T lhs, T rhs) [ 0:14] 27 { [ 0:14] 28 ASSERT_NOEXCEPT(std::declval() = rhs); [ 0:14] 29 lhs = rhs; [ 0:14] 30 return lhs.data() == rhs.data() [ 0:14] 31 && lhs.size() == rhs.size(); [ 0:14] 32 } [ 0:14] 33 [ 0:14] 34 struct A{}; [ 0:14] 35 [ 0:14] 36 constexpr int carr1[] = {1,2,3,4}; [ 0:14] 37 constexpr int carr2[] = {3,4,5}; [ 0:14] 38 constexpr int carr3[] = {7,8}; [ 0:14] 39 int arr[] = {5,6,7,9}; [ 0:14] 40 std::string strs[] = {"ABC", "DEF", "GHI"}; [ 0:14] 41 [ 0:14] 42 [ 0:14] 43 int main(int, char**) [ 0:14] 44 { [ 0:14] 45 [ 0:14] 46 // constexpr dynamically sized assignment [ 0:14] 47 { [ 0:14] 48 // On systems where 'ptrdiff_t' is a synonym for 'int', [ 0:14] 49 // the call span(ptr, 0) selects the (pointer, index_type) constructor. [ 0:14] 50 // On systems where 'ptrdiff_t' is NOT a synonym for 'int', [ 0:14] 51 // it is ambiguous, because of 0 also being convertible to a null pointer [ 0:14] 52 // and so the compiler can't choose between: [ 0:14] 53 // span(pointer, index_type) [ 0:14] 54 // and span(pointer, pointer) [ 0:14] 55 // We cast zero to std::ptrdiff_t to remove that ambiguity. [ 0:14] 56 // Example: [ 0:14] 57 // On darwin x86_64, ptrdiff_t is the same as long int. [ 0:14] 58 // On darwin i386, ptrdiff_t is the same as int. [ 0:14] 59 constexpr std::span spans[] = { [ 0:14] 60 {}, [ 0:14] 61 {carr1, static_cast(0)}, [ 0:14] 62 {carr1, 1U}, [ 0:14] 63 {carr1, 2U}, [ 0:14] 64 {carr1, 3U}, [ 0:14] 65 {carr1, 4U}, [ 0:14] 66 {carr2, static_cast(0)}, [ 0:14] 67 {carr2, 1U}, [ 0:14] 68 {carr2, 2U}, [ 0:14] 69 {carr2, 3U}, [ 0:14] 70 {carr3, static_cast(0)}, [ 0:14] 71 {carr3, 1U}, [ 0:14] 72 {carr3, 2U} [ 0:14] 73 }; [ 0:14] 74 [ 0:14] 75 static_assert(std::size(spans) == 13, "" ); [ 0:14] 76 [ 0:14] 77 // No for loops in constexpr land :-( [ 0:14] 78 static_assert(doAssign(spans[0], spans[0]), ""); [ 0:14] 79 static_assert(doAssign(spans[0], spans[1]), ""); [ 0:14] 80 static_assert(doAssign(spans[0], spans[2]), ""); [ 0:14] 81 static_assert(doAssign(spans[0], spans[3]), ""); [ 0:14] 82 static_assert(doAssign(spans[0], spans[4]), ""); [ 0:14] 83 static_assert(doAssign(spans[0], spans[5]), ""); [ 0:14] 84 static_assert(doAssign(spans[0], spans[6]), ""); [ 0:14] 85 static_assert(doAssign(spans[0], spans[7]), ""); [ 0:14] 86 static_assert(doAssign(spans[0], spans[8]), ""); [ 0:14] 87 static_assert(doAssign(spans[0], spans[9]), ""); [ 0:14] 88 static_assert(doAssign(spans[0], spans[10]), ""); [ 0:14] 89 static_assert(doAssign(spans[0], spans[11]), ""); [ 0:14] 90 static_assert(doAssign(spans[0], spans[12]), ""); [ 0:14] 91 [ 0:14] 92 static_assert(doAssign(spans[1], spans[1]), ""); [ 0:14] 93 static_assert(doAssign(spans[1], spans[2]), ""); [ 0:14] 94 static_assert(doAssign(spans[1], spans[3]), ""); [ 0:14] 95 static_assert(doAssign(spans[1], spans[4]), ""); [ 0:14] 96 static_assert(doAssign(spans[1], spans[5]), ""); [ 0:14] 97 static_assert(doAssign(spans[1], spans[6]), ""); [ 0:14] 98 static_assert(doAssign(spans[1], spans[7]), ""); [ 0:14] 99 static_assert(doAssign(spans[1], spans[8]), ""); [ 0:14] 100 static_assert(doAssign(spans[1], spans[9]), ""); [ 0:14] 101 static_assert(doAssign(spans[1], spans[10]), ""); [ 0:14] 102 static_assert(doAssign(spans[1], spans[11]), ""); [ 0:14] 103 static_assert(doAssign(spans[1], spans[12]), ""); [ 0:14] 104 [ 0:14] 105 static_assert(doAssign(spans[2], spans[2]), ""); [ 0:14] 106 static_assert(doAssign(spans[2], spans[3]), ""); [ 0:14] 107 static_assert(doAssign(spans[2], spans[4]), ""); [ 0:14] 108 static_assert(doAssign(spans[2], spans[5]), ""); [ 0:14] 109 static_assert(doAssign(spans[2], spans[6]), ""); [ 0:14] 110 static_assert(doAssign(spans[2], spans[7]), ""); [ 0:14] 111 static_assert(doAssign(spans[2], spans[8]), ""); [ 0:14] 112 static_assert(doAssign(spans[2], spans[9]), ""); [ 0:14] 113 static_assert(doAssign(spans[2], spans[10]), ""); [ 0:14] 114 static_assert(doAssign(spans[2], spans[11]), ""); [ 0:14] 115 static_assert(doAssign(spans[2], spans[12]), ""); [ 0:14] 116 [ 0:14] 117 static_assert(doAssign(spans[3], spans[3]), ""); [ 0:14] 118 static_assert(doAssign(spans[3], spans[4]), ""); [ 0:14] 119 static_assert(doAssign(spans[3], spans[4]), ""); [ 0:14] 120 static_assert(doAssign(spans[3], spans[4]), ""); [ 0:14] 121 static_assert(doAssign(spans[3], spans[4]), ""); [ 0:14] 122 static_assert(doAssign(spans[3], spans[4]), ""); [ 0:14] 123 static_assert(doAssign(spans[3], spans[4]), ""); [ 0:14] 124 static_assert(doAssign(spans[3], spans[4]), ""); [ 0:14] 125 static_assert(doAssign(spans[3], spans[4]), ""); [ 0:14] 126 static_assert(doAssign(spans[3], spans[10]), ""); [ 0:14] 127 static_assert(doAssign(spans[3], spans[11]), ""); [ 0:14] 128 static_assert(doAssign(spans[3], spans[12]), ""); [ 0:14] 129 [ 0:14] 130 static_assert(doAssign(spans[4], spans[4]), ""); [ 0:14] 131 static_assert(doAssign(spans[4], spans[5]), ""); [ 0:14] 132 static_assert(doAssign(spans[4], spans[6]), ""); [ 0:14] 133 static_assert(doAssign(spans[4], spans[7]), ""); [ 0:14] 134 static_assert(doAssign(spans[4], spans[8]), ""); [ 0:14] 135 static_assert(doAssign(spans[4], spans[9]), ""); [ 0:14] 136 static_assert(doAssign(spans[4], spans[10]), ""); [ 0:14] 137 static_assert(doAssign(spans[4], spans[11]), ""); [ 0:14] 138 static_assert(doAssign(spans[4], spans[12]), ""); [ 0:14] 139 [ 0:14] 140 static_assert(doAssign(spans[5], spans[5]), ""); [ 0:14] 141 static_assert(doAssign(spans[5], spans[6]), ""); [ 0:14] 142 static_assert(doAssign(spans[5], spans[7]), ""); [ 0:14] 143 static_assert(doAssign(spans[5], spans[8]), ""); [ 0:14] 144 static_assert(doAssign(spans[5], spans[9]), ""); [ 0:14] 145 static_assert(doAssign(spans[5], spans[10]), ""); [ 0:14] 146 static_assert(doAssign(spans[5], spans[11]), ""); [ 0:14] 147 static_assert(doAssign(spans[5], spans[12]), ""); [ 0:14] 148 [ 0:14] 149 static_assert(doAssign(spans[6], spans[6]), ""); [ 0:14] 150 static_assert(doAssign(spans[6], spans[7]), ""); [ 0:14] 151 static_assert(doAssign(spans[6], spans[8]), ""); [ 0:14] 152 static_assert(doAssign(spans[6], spans[9]), ""); [ 0:14] 153 static_assert(doAssign(spans[6], spans[10]), ""); [ 0:14] 154 static_assert(doAssign(spans[6], spans[11]), ""); [ 0:14] 155 static_assert(doAssign(spans[6], spans[12]), ""); [ 0:14] 156 [ 0:14] 157 static_assert(doAssign(spans[7], spans[7]), ""); [ 0:14] 158 static_assert(doAssign(spans[7], spans[8]), ""); [ 0:14] 159 static_assert(doAssign(spans[7], spans[9]), ""); [ 0:14] 160 static_assert(doAssign(spans[7], spans[10]), ""); [ 0:14] 161 static_assert(doAssign(spans[7], spans[11]), ""); [ 0:14] 162 static_assert(doAssign(spans[7], spans[12]), ""); [ 0:14] 163 [ 0:14] 164 static_assert(doAssign(spans[8], spans[8]), ""); [ 0:14] 165 static_assert(doAssign(spans[8], spans[9]), ""); [ 0:14] 166 static_assert(doAssign(spans[8], spans[10]), ""); [ 0:14] 167 static_assert(doAssign(spans[8], spans[11]), ""); [ 0:14] 168 static_assert(doAssign(spans[8], spans[12]), ""); [ 0:14] 169 [ 0:14] 170 static_assert(doAssign(spans[9], spans[9]), ""); [ 0:14] 171 static_assert(doAssign(spans[9], spans[10]), ""); [ 0:14] 172 static_assert(doAssign(spans[9], spans[11]), ""); [ 0:14] 173 static_assert(doAssign(spans[9], spans[12]), ""); [ 0:14] 174 [ 0:14] 175 static_assert(doAssign(spans[10], spans[10]), ""); [ 0:14] 176 static_assert(doAssign(spans[10], spans[11]), ""); [ 0:14] 177 static_assert(doAssign(spans[10], spans[12]), ""); [ 0:14] 178 [ 0:14] 179 static_assert(doAssign(spans[11], spans[11]), ""); [ 0:14] 180 static_assert(doAssign(spans[11], spans[12]), ""); [ 0:14] 181 [ 0:14] 182 static_assert(doAssign(spans[12], spans[12]), ""); [ 0:14] 183 [ 0:14] 184 // for (size_t i = 0; i < std::size(spans); ++i) [ 0:14] 185 // for (size_t j = i; j < std::size(spans); ++j) [ 0:14] 186 // static_assert(doAssign(spans[i], spans[j]), ""); [ 0:14] 187 } [ 0:14] 188 [ 0:14] 189 // constexpr statically sized assignment [ 0:14] 190 { [ 0:14] 191 constexpr std::span spans[] = { [ 0:14] 192 {carr1, 2}, [ 0:14] 193 {carr1 + 1, 2}, [ 0:14] 194 {carr1 + 2, 2}, [ 0:14] 195 {carr2, 2}, [ 0:14] 196 {carr2 + 1, 2}, [ 0:14] 197 {carr3, 2} [ 0:14] 198 }; [ 0:14] 199 [ 0:14] 200 static_assert(std::size(spans) == 6, "" ); [ 0:14] 201 [ 0:14] 202 // No for loops in constexpr land :-( [ 0:14] 203 static_assert(doAssign(spans[0], spans[0]), ""); [ 0:14] 204 static_assert(doAssign(spans[0], spans[1]), ""); [ 0:14] 205 static_assert(doAssign(spans[0], spans[2]), ""); [ 0:14] 206 static_assert(doAssign(spans[0], spans[3]), ""); [ 0:14] 207 static_assert(doAssign(spans[0], spans[4]), ""); [ 0:14] 208 static_assert(doAssign(spans[0], spans[5]), ""); [ 0:14] 209 [ 0:14] 210 static_assert(doAssign(spans[1], spans[1]), ""); [ 0:14] 211 static_assert(doAssign(spans[1], spans[2]), ""); [ 0:14] 212 static_assert(doAssign(spans[1], spans[3]), ""); [ 0:14] 213 static_assert(doAssign(spans[1], spans[4]), ""); [ 0:14] 214 static_assert(doAssign(spans[1], spans[5]), ""); [ 0:14] 215 [ 0:14] 216 static_assert(doAssign(spans[2], spans[2]), ""); [ 0:14] 217 static_assert(doAssign(spans[2], spans[3]), ""); [ 0:14] 218 static_assert(doAssign(spans[2], spans[4]), ""); [ 0:14] 219 static_assert(doAssign(spans[2], spans[5]), ""); [ 0:14] 220 [ 0:14] 221 static_assert(doAssign(spans[3], spans[3]), ""); [ 0:14] 222 static_assert(doAssign(spans[3], spans[4]), ""); [ 0:14] 223 static_assert(doAssign(spans[3], spans[5]), ""); [ 0:14] 224 [ 0:14] 225 static_assert(doAssign(spans[4], spans[4]), ""); [ 0:14] 226 static_assert(doAssign(spans[4], spans[5]), ""); [ 0:14] 227 [ 0:14] 228 static_assert(doAssign(spans[5], spans[5]), ""); [ 0:14] 229 [ 0:14] 230 // for (size_t i = 0; i < std::size(spans); ++i) [ 0:14] 231 // for (size_t j = i; j < std::size(spans); ++j) [ 0:14] 232 // static_assert(doAssign(spans[i], spans[j]), ""); [ 0:14] 233 } [ 0:14] 234 [ 0:14] 235 [ 0:14] 236 // dynamically sized assignment [ 0:14] 237 { [ 0:14] 238 std::span spans[] = { [ 0:14] 239 {}, [ 0:14] 240 {arr, arr + 1}, [ 0:14] 241 {arr, arr + 2}, [ 0:14] 242 {arr, arr + 3}, [ 0:14] 243 {arr + 1, arr + 3} // same size as s2 [ 0:14] 244 }; [ 0:14] 245 [ 0:14] 246 for (size_t i = 0; i < std::size(spans); ++i) [ 0:14] 247 for (size_t j = i; j < std::size(spans); ++j) [ 0:14] 248 assert((doAssign(spans[i], spans[j]))); [ 0:14] 249 } [ 0:14] 250 [ 0:14] 251 // statically sized assignment [ 0:14] 252 { [ 0:14] 253 std::span spans[] = { [ 0:14] 254 {arr, arr + 2}, [ 0:14] 255 {arr + 1, arr + 3}, [ 0:14] 256 {arr + 2, arr + 4} [ 0:14] 257 }; [ 0:14] 258 [ 0:14] 259 for (size_t i = 0; i < std::size(spans); ++i) [ 0:14] 260 for (size_t j = i; j < std::size(spans); ++j) [ 0:14] 261 assert((doAssign(spans[i], spans[j]))); [ 0:14] 262 } [ 0:14] 263 [ 0:14] 264 // dynamically sized assignment [ 0:14] 265 { [ 0:14] 266 std::span spans[] = { [ 0:14] 267 {strs, strs}, [ 0:14] 268 {strs, strs + 1}, [ 0:14] 269 {strs, strs + 2}, [ 0:14] 270 {strs, strs + 3}, [ 0:14] 271 {strs + 1, strs + 1}, [ 0:14] 272 {strs + 1, strs + 2}, [ 0:14] 273 {strs + 1, strs + 3}, [ 0:14] 274 {strs + 2, strs + 2}, [ 0:14] 275 {strs + 2, strs + 3}, [ 0:14] 276 {strs + 3, strs + 3} [ 0:14] 277 }; [ 0:14] 278 [ 0:14] 279 for (size_t i = 0; i < std::size(spans); ++i) [ 0:14] 280 for (size_t j = i; j < std::size(spans); ++j) [ 0:14] 281 assert((doAssign(spans[i], spans[j]))); [ 0:14] 282 } [ 0:14] 283 [ 0:14] 284 { [ 0:14] 285 std::span spans[] = { [ 0:14] 286 {strs, strs + 1}, [ 0:14] 287 {strs + 1, strs + 2}, [ 0:14] 288 {strs + 2, strs + 3} [ 0:14] 289 }; [ 0:14] 290 [ 0:14] 291 for (size_t i = 0; i < std::size(spans); ++i) [ 0:14] 292 for (size_t j = i; j < std::size(spans); ++j) [ 0:14] 293 assert((doAssign(spans[i], spans[j]))); [ 0:14] 294 } [ 0:14] 295 [ 0:14] 296 return 0; [ 0:14] 297 } [ 0:14] # no errors were expected but one was found anyway