uatomic/x86: Remove redundant memory barriers
[urcu.git] / tests / unit / test_build.c
CommitLineData
ce29b371
MJ
1// SPDX-FileCopyrightText: 2021 Simon Marchi <simon.marchi@efficios.com>
2//
3// SPDX-License-Identifier: GPL-2.0-or-later
28757437
SM
4
5/*
6 * This file is meant to verify that headers are compatible with both C and
7 * C++. It includes all exported headers and is compiled as C and C++ source.
8 */
9
10#ifndef DYNAMIC_LINK_TEST
11# define _LGPL_SOURCE
12#endif
13
14#include <urcu/arch.h>
15#include <urcu/call-rcu.h>
16#include <urcu/cds.h>
17#include <urcu/compiler.h>
18#include <urcu/debug.h>
19#include <urcu/defer.h>
20#include <urcu/flavor.h>
21#include <urcu/futex.h>
22#include <urcu/hlist.h>
23#include <urcu/lfstack.h>
24#include <urcu/list.h>
25#include <urcu/pointer.h>
26#include <urcu/rcuhlist.h>
27#include <urcu/rculfhash.h>
28#include <urcu/rculfqueue.h>
29#include <urcu/rculfstack.h>
30#include <urcu/rculist.h>
31#include <urcu/ref.h>
32#include <urcu/syscall-compat.h>
33#include <urcu/system.h>
34#include <urcu/tls-compat.h>
35#include <urcu/uatomic.h>
36#include <urcu/urcu-bp.h>
37#include <urcu/urcu.h>
38#include <urcu/urcu-mb.h>
39#include <urcu/urcu-memb.h>
40#include <urcu/urcu-qsbr.h>
28757437
SM
41#include <urcu/wfcqueue.h>
42#include <urcu/wfqueue.h>
43#include <urcu/wfstack.h>
44
45#include "tap.h"
46
69fbb39e
MJ
47struct my_tls_struct {
48 int int1;
49 char char1;
50 void *void1;
51};
52
53static DEFINE_URCU_TLS(int, my_tls_int);
54static DEFINE_URCU_TLS(struct my_tls_struct, my_tls_struct);
55
6faece30
MD
56static void test_lfstack(void)
57{
58 struct cds_lfs_stack s;
59
60 cds_lfs_init(&s);
c8292aa7 61 ok(cds_lfs_empty(&s), "cds_lfs_empty");
6faece30
MD
62}
63
64static void test_wfstack(void)
65{
66 struct cds_wfs_stack s;
67
68 cds_wfs_init(&s);
c8292aa7 69 ok(cds_wfs_empty(&s), "cds_lfs_empty");
6faece30
MD
70}
71
72static void test_wfcqueue(void)
73{
74 struct cds_wfcq_head head;
75 struct cds_wfcq_tail tail;
76
77 cds_wfcq_init(&head, &tail);
c8292aa7 78 ok(cds_wfcq_empty(&head, &tail), "cds_wfcq_empty");
6faece30
MD
79}
80
6d9b21f0
SM
81static
82void test_build_cds_list_head_init(void)
83{
84 /* Test that the CDS_LIST_HEAD_INIT macro builds correctly. */
85 struct struct_with_list {
86 struct cds_list_head head;
87 };
88
89 struct struct_with_list list = {
90 .head = CDS_LIST_HEAD_INIT(list.head),
91 };
92}
93
69fbb39e
MJ
94static
95void test_urcu_tls(void)
96{
97 URCU_TLS(my_tls_int) = 1;
98 URCU_TLS(my_tls_struct).int1 = 1;
99 URCU_TLS(my_tls_struct).char1 = 'a';
100 URCU_TLS(my_tls_struct).void1 = NULL;
101}
102
2d466a63
SM
103struct an_opaque_struct;
104struct a_clear_struct
105{
106 int x;
107};
108
109static
110void test_build_rcu_dereference(void)
111{
112 static struct an_opaque_struct *opaque = NULL;
113 static struct an_opaque_struct *const opaque_const = NULL;
114 static struct a_clear_struct *clear = NULL;
115 static struct a_clear_struct *const clear_const = NULL;
116
fcab075f
OD
117 (void) rcu_dereference(opaque);
118 (void) rcu_dereference(opaque_const);
119 (void) rcu_dereference(clear);
120 (void) rcu_dereference(clear_const);
2d466a63
SM
121}
122
28757437
SM
123int main(void)
124{
6faece30 125 plan_tests(3);
28757437 126
6faece30
MD
127 test_lfstack();
128 test_wfstack();
129 test_wfcqueue();
6d9b21f0 130 test_build_cds_list_head_init();
69fbb39e 131 test_urcu_tls();
2d466a63 132 test_build_rcu_dereference();
6faece30 133
28757437
SM
134 return exit_status();
135}
This page took 0.030687 seconds and 4 git commands to generate.