mirror of
https://github.com/mstorsjo/llvm-mingw
synced 2026-06-21 14:01:00 +00:00
test: Add the original test case for atomic loads of varying sizes
This covers the original testcase from https://github.com/mstorsjo/llvm-mingw/issues/538.
This commit is contained in:
+1
-1
@@ -74,7 +74,7 @@ TESTS_C_LINK_DLL = autoimport-main
|
||||
TESTS_C_NO_BUILTIN = crt-test
|
||||
TESTS_C_ANSI_STDIO = crt-test
|
||||
TESTS_C_AS_CPP = crt-test
|
||||
TESTS_CPP = hello-cpp global-terminate tlstest-main longjmp-cleanup
|
||||
TESTS_CPP = hello-cpp global-terminate tlstest-main longjmp-cleanup atomic-load-sizes
|
||||
TESTS_CPP_EXCEPTIONS = hello-exception exception-locale exception-reduced exception-catch-ptr-ref
|
||||
TESTS_CPP_STATIC = hello-exception
|
||||
TESTS_CPP_DLL = tlstest-lib throwcatch-lib
|
||||
|
||||
@@ -0,0 +1,46 @@
|
||||
/*
|
||||
* Copyright (c) 2026 Martin Storsjo
|
||||
*
|
||||
* This file is part of llvm-mingw.
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
#include <array>
|
||||
#include <atomic>
|
||||
#include <cstdint>
|
||||
#include <iostream>
|
||||
#include <numeric>
|
||||
|
||||
int retval = 0;
|
||||
|
||||
template <std::size_t size, std::size_t max_size>
|
||||
void f() {
|
||||
using type_t = std::array<std::uint8_t, size>;
|
||||
type_t init;
|
||||
for (std::size_t i = 0; i < size; i++)
|
||||
init[i] = i;
|
||||
std::atomic<type_t> atom(init);
|
||||
bool match = atom.load() == init;
|
||||
std::cout << size << " byte atomic: " << (match ? "ok\n" : "FAILED\n");
|
||||
if (!match)
|
||||
retval = 1;
|
||||
if constexpr (size < max_size) {
|
||||
f<size + 1, max_size>();
|
||||
}
|
||||
}
|
||||
|
||||
int main() {
|
||||
f<1, 32>();
|
||||
return retval;
|
||||
}
|
||||
Reference in New Issue
Block a user