c11_atomic.c revision 1.4
11.4Srillig/*	$NetBSD: c11_atomic.c,v 1.4 2023/07/07 00:20:39 rillig Exp $	*/
21.1Srillig# 3 "c11_atomic.c"
31.1Srillig
41.1Srillig/*
51.1Srillig * The keyword '_Atomic' was added in C11.  This test ensures that in C11
61.1Srillig * mode, '_Atomic' can be used as both type qualifier and type specifier.
71.1Srillig *
81.1Srillig * See also:
91.1Srillig *	C11 6.7.3 Type qualifiers
101.1Srillig *	C11 6.7.2.4 Atomic type specifiers
111.4Srillig *	msg_350.c
121.1Srillig */
131.1Srillig
141.1Srillig/* lint1-extra-flags: -Ac11 */
151.1Srillig
161.1Srillig/* C11 6.7.3 "Type qualifiers" */
171.1Srilligtypedef _Atomic int atomic_int;
181.1Srillig
191.1Srilligtypedef _Atomic struct {
201.1Srillig	int field;
211.1Srillig} atomic_struct;
221.1Srillig
231.3Srillig/* C11 6.7.2.4 "Atomic type specifiers" */
241.3Srilligdouble *
251.3Srilligatomic_ptr_cmpexch(_Atomic(double *)*ptr_var, _Atomic(double *) new_value)
261.3Srillig{
271.3Srillig	double *old = *ptr_var;
281.3Srillig	*ptr_var = new_value;
291.3Srillig	return old;
301.3Srillig}
31