mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-03-09 05:02:19 +00:00
Mark ATOMIC_VAR_INIT and ATOMIC_FLAG_INIT as deprecated
C17 deprecated ATOMIC_VAR_INIT with the resolution of DR 485. C++ followed suit when adopting P0883R2 for C++20, but additionally chose to deprecate ATOMIC_FLAG_INIT at the same time despite the macro still being required in C. This patch marks both macros as deprecated when appropriate to do so.
This commit is contained in:
parent
e328385739
commit
0d459444e5
@ -169,6 +169,11 @@ C Language Changes in Clang
|
||||
which adds ``*_WIDTH`` macros to limits.h and stdint.h to report the bit
|
||||
width of various integer datatypes.
|
||||
|
||||
- The ``ATOMIC_VAR_INIT`` macro from ``<stdatomic.h>`` is now diagnosed as
|
||||
deprecated in C17 and later. The diagnostic can be disabled by defining the
|
||||
``_CLANG_DISABLE_CRT_DEPRECATION_WARNINGS`` macro prior to including the
|
||||
header.
|
||||
|
||||
C++ Language Changes in Clang
|
||||
-----------------------------
|
||||
|
||||
@ -176,7 +181,15 @@ C++ Language Changes in Clang
|
||||
|
||||
C++20 Feature Support
|
||||
^^^^^^^^^^^^^^^^^^^^^
|
||||
...
|
||||
|
||||
- The ``ATOMIC_VAR_INIT`` and ``ATOMIC_FLAG_INIT`` macros from the C standard
|
||||
library ``<stdatomic.h>`` header are now diagnosed as deprecated in C++20 and
|
||||
later. Note, the behavior is specific to the inclusion of ``<stdatomic.h>``
|
||||
in C++ code; the STL ``<atomic>`` header also controls the behavior of these
|
||||
macros and is not affected by these changes. The ``<stdatomic.h>`` diagnostic
|
||||
can be disabled by defining the ``_CLANG_DISABLE_CRT_DEPRECATION_WARNINGS``
|
||||
macro prior to including the header.
|
||||
|
||||
|
||||
C++2b Feature Support
|
||||
^^^^^^^^^^^^^^^^^^^^^
|
||||
|
@ -1132,10 +1132,28 @@ A ``#include`` directive which finds a file relative to the current
|
||||
directory is treated as including a system header if the including file
|
||||
is treated as a system header.
|
||||
|
||||
Controlling Deprecation Diagnostics in Clang-Provided C Runtime Headers
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Clang is responsible for providing some of the C runtime headers that cannot be
|
||||
provided by a platform CRT, such as implementation limits or when compiling in
|
||||
freestanding mode. Define the ``_CLANG_DISABLE_CRT_DEPRECATION_WARNINGS`` macro
|
||||
prior to including such a C runtime header to disable the deprecation warnings.
|
||||
Note that the C Standard Library headers are allowed to transitively include
|
||||
other standard library headers (see 7.1.2p5), and so the most appropriate use
|
||||
of this macro is to set it within the build system using ``-D`` or before any
|
||||
include directives in the translation unit.
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
#define _CLANG_DISABLE_CRT_DEPRECATION_WARNINGS
|
||||
#include <stdint.h> // Clang CRT deprecation warnings are disabled.
|
||||
#include <stdatomic.h> // Clang CRT deprecation warnings are disabled.
|
||||
|
||||
.. _diagnostics_enable_everything:
|
||||
|
||||
Enabling All Diagnostics
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
In addition to the traditional ``-W`` flags, one can enable **all** diagnostics
|
||||
by passing :option:`-Weverything`. This works as expected with
|
||||
|
@ -44,6 +44,11 @@ extern "C" {
|
||||
/* 7.17.2 Initialization */
|
||||
|
||||
#define ATOMIC_VAR_INIT(value) (value)
|
||||
#if (__STDC_VERSION__ >= 201710L || __cplusplus >= 202002L) && \
|
||||
!defined(_CLANG_DISABLE_CRT_DEPRECATION_WARNINGS)
|
||||
/* ATOMIC_VAR_INIT was deprecated in C17 and C++20. */
|
||||
#pragma clang deprecated(ATOMIC_VAR_INIT)
|
||||
#endif
|
||||
#define atomic_init __c11_atomic_init
|
||||
|
||||
/* 7.17.3 Order and consistency */
|
||||
@ -153,6 +158,10 @@ typedef _Atomic(uintmax_t) atomic_uintmax_t;
|
||||
typedef struct atomic_flag { atomic_bool _Value; } atomic_flag;
|
||||
|
||||
#define ATOMIC_FLAG_INIT { 0 }
|
||||
#if __cplusplus >= 202002L && !defined(_CLANG_DISABLE_CRT_DEPRECATION_WARNINGS)
|
||||
/* ATOMIC_FLAG_INIT was deprecated in C++20 but is not deprecated in C. */
|
||||
#pragma clang deprecated(ATOMIC_FLAG_INIT)
|
||||
#endif
|
||||
|
||||
/* These should be provided by the libc implementation. */
|
||||
#ifdef __cplusplus
|
||||
|
18
clang/test/Headers/stdatomic-deprecations.c
Normal file
18
clang/test/Headers/stdatomic-deprecations.c
Normal file
@ -0,0 +1,18 @@
|
||||
// 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) // cxx-warning {{macro 'ATOMIC_FLAG_INIT' has been marked as deprecated}} \
|
||||
// cxx-note@stdatomic.h:* {{macro marked 'deprecated' here}}
|
||||
#endif
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user