Skip to content

Commit

Permalink
test: Add a testcase for atomic helpers
Browse files Browse the repository at this point in the history
  • Loading branch information
mstorsjo committed Dec 7, 2023
1 parent 5087d5d commit b9b797d
Show file tree
Hide file tree
Showing 2 changed files with 51 additions and 2 deletions.
12 changes: 10 additions & 2 deletions test/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,7 @@ ifneq ($(HAVE_CFGUARD),)
TESTS_CFGUARD = cfguard-test
TESTS_ASAN_CFGUARD = $(TESTS_ASAN)
endif
TESTS_ATOMIC = atomic-helpers

TARGETS_C = $(addsuffix $(EXEEXT), $(TESTS_C))
TARGETS_C_DLL = $(addsuffix $(DLLEXT), $(TESTS_C_DLL))
Expand Down Expand Up @@ -116,6 +117,7 @@ TARGETS_ASAN = $(addsuffix -asan$(EXEEXT), $(TESTS_ASAN))
TARGETS_UBSAN = $(addsuffix $(EXEEXT), $(TESTS_UBSAN))
TARGETS_ASAN_CFGUARD = $(addsuffix -asan-cfguard$(EXEEXT), $(TESTS_ASAN_CFGUARD))
TARGETS_OMP = $(addsuffix $(EXEEXT), $(TESTS_OMP))
TARGETS_ATOMIC = $(addsuffix $(EXEEXT), $(TESTS_ATOMIC))

TARGETS = \
$(TARGETS_C) $(TARGETS_C_DLL) $(TARGETS_C_LINK_DLL) $(TARGETS_C_NO_BUILTIN) $(TARGETS_C_ANSI_STDIO) \
Expand All @@ -124,7 +126,7 @@ TARGETS = \
$(TARGETS_IDL) \
$(TARGETS_OTHER_TARGETS) $(TARGETS_UWP) $(TARGETS_UWP_FAIL) \
$(TARGETS_ASAN) $(TARGETS_UBSAN) $(TARGETS_ASAN_CFGUARD) \
$(TARGETS_OMP)
$(TARGETS_OMP) $(TARGETS_ATOMIC)

# crt-test-fortify doesn't trigger failures
FAILURE_TESTS = \
Expand Down Expand Up @@ -192,6 +194,9 @@ $(TARGETS_ASAN_CFGUARD): %-asan-cfguard$(EXEEXT): %.c
$(TARGETS_OMP): %$(EXEEXT): %.c
$(CC) $(CPPFLAGS) $(CFLAGS) $< -o $@ -fopenmp=libomp

$(TARGETS_ATOMIC): %$(EXEEXT): %.c
$(CC) $(CPPFLAGS) $(CFLAGS) $< -o $@ -Wno-atomic-alignment -latomic

%.h: %.idl
$(WIDL) $< -h -o $@

Expand Down Expand Up @@ -219,8 +224,11 @@ COMPILER_RT_ARCH = $(ARCH)
ifeq ($(ARCH), i686)
COMPILER_RT_ARCH = i386
endif
ifeq ($(ARCH), armv7)
COMPILER_RT_ARCH = arm
endif

RUNTIMES = libc++ libunwind libclang_rt.asan_dynamic-$(COMPILER_RT_ARCH) libomp
RUNTIMES = libc++ libunwind libclang_rt.asan_dynamic-$(COMPILER_RT_ARCH) libomp libclang_rt.atomic_dynamic-$(COMPILER_RT_ARCH)
ifneq ($(RUNTIMES_SRC),)
LOCAL_RUNTIMES = $(patsubst $(RUNTIMES_SRC)/%, %, $(wildcard $(addprefix $(RUNTIMES_SRC)/, $(addsuffix $(DLLEXT), $(RUNTIMES)))))

Expand Down
41 changes: 41 additions & 0 deletions test/atomic-helpers.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
/*
* Copyright (c) 2023 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 <stdatomic.h>

struct large {
int data[20];
};

typedef struct large type;

_Atomic type value;

type get(void) {
return atomic_load(&value);
}

type myValue;

int lockfree;

int main(int argc, char* argv[]) {
myValue = get();
lockfree = atomic_is_lock_free(&value);
return 0;
}

0 comments on commit b9b797d

Please sign in to comment.