llvm-project/clang/test/Headers/stdatomic-deprecations.c
Aaron Ballman 3cfa32a71e Undeprecate ATOMIC_FLAG_INIT in C++
C++20 deprecated ATOMIC_FLAG_INIT thinking it was deprecated in C when it
wasn't. It is expected to be undeprecated in C++23 as part of LWG3659
(https://wg21.link/LWG3659), which is currently Tentatively Ready.

This handles the case where the user includes <stdatomic.h> in C++ code in a
freestanding compile mode. The corollary libc++ changes are in
1544d1f9fdb115782202d72ad200c3f93b2c4f5a.
2022-07-12 06:48:31 -04:00

18 lines
861 B
C

// RUN: %clang_cc1 -fsyntax-only -std=c11 %s -verify=okay
// RUN: %clang_cc1 -fsyntax-only -std=c17 %s -verify
// RUN: %clang_cc1 -fsyntax-only -std=c++11 -x c++ %s -verify=okay
// RUN: %clang_cc1 -fsyntax-only -std=c++20 -x c++ %s -verify=cxx,expected
// RUN: %clang_cc1 -fsyntax-only -std=c++20 -x c++ %s -verify=okay -D_CLANG_DISABLE_CRT_DEPRECATION_WARNINGS
// RUN: %clang_cc1 -fsyntax-only -std=c17 %s -verify=okay -D_CLANG_DISABLE_CRT_DEPRECATION_WARNINGS
//
// okay-no-diagnostics
#include <stdatomic.h>
void func(void) {
_Atomic int i = ATOMIC_VAR_INIT(12); // expected-warning {{macro 'ATOMIC_VAR_INIT' has been marked as deprecated}} \
// expected-note@stdatomic.h:* {{macro marked 'deprecated' here}}
#if defined(ATOMIC_FLAG_INIT) // Ok, deprecated in C++20, undeprecated in C++23 via LWG4659.
#endif
}