[PATCH] D112221: Mark ATOMIC_VAR_INIT and ATOMIC_FLAG_INIT as deprecated

Aaron Ballman via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Thu Oct 21 07:53:19 PDT 2021


aaron.ballman created this revision.
aaron.ballman added reviewers: rsmith, ldionne, cjdb, erichkeane.
aaron.ballman requested review of this revision.
Herald added a project: clang.

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.

It does so by using `#pragma clang deprecated` and this patch presumes we don't have to guard those uses of the pragma with compiler or compiler version checks.

I believe libc++ will need some changes to address the deprecation as it seems it is using these macros. I'm not a libc++ maintainer and so I've added a few libc++ folks to the review so they can weigh in on whether libc++ should change first or can react to the changes in this patch. If libc++ needs to change first and you'd like me to drive those changes, I'd appreciate knowing what changes the maintainers would like to see there (I believe that removing the ATOMIC_VAR_INIT and using direct initialization would be appropriate, but I have no idea if the maintainers agree).


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D112221

Files:
  clang/lib/Headers/stdatomic.h
  clang/test/Headers/stdatomic-deprecations.c


Index: clang/test/Headers/stdatomic-deprecations.c
===================================================================
--- /dev/null
+++ clang/test/Headers/stdatomic-deprecations.c
@@ -0,0 +1,15 @@
+// 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
+
+// okay-no-diagnostics
+
+#include <stdatomic.h>
+
+void func(void) {
+  (void)ATOMIC_VAR_INIT(12); // expected-warning {{macro 'ATOMIC_VAR_INIT' has been marked as deprecated}}
+  #if defined(ATOMIC_FLAG_INIT) // cxx-warning {{macro 'ATOMIC_FLAG_INIT' has been marked as deprecated}}
+  #endif
+}
+
Index: clang/lib/Headers/stdatomic.h
===================================================================
--- clang/lib/Headers/stdatomic.h
+++ clang/lib/Headers/stdatomic.h
@@ -40,6 +40,10 @@
 /* 7.17.2 Initialization */
 
 #define ATOMIC_VAR_INIT(value) (value)
+#if __STDC_VERSION__ >= 201710L || __cplusplus >= 202002L
+/* 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 */
@@ -149,6 +153,10 @@
 typedef struct atomic_flag { atomic_bool _Value; } atomic_flag;
 
 #define ATOMIC_FLAG_INIT { 0 }
+#if __cplusplus >= 202002L
+/* 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


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D112221.381260.patch
Type: text/x-patch
Size: 1622 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20211021/675cf7a1/attachment-0001.bin>


More information about the cfe-commits mailing list