From cff9e77783aceb52da705b7e2b2e45bfbc86c628 Mon Sep 17 00:00:00 2001
From: cor3ntin
Date: Tue, 14 May 2024 06:15:01 +0200
Subject: [PATCH] [Clang][NFC] Mark P2552 as implemented. (#92007)
wg21.link/P2552 suggest that __has_cpp_attribute
should return a non-zero value for all attributes that the
implementation does something interesting with.
Clang does something meaninful with all attributes except for:
- no_unique_address which we do not support for msvc target
- carries_dependency which arguably does nothing interesting. P2552
shies away from specifying a behavior for that attribute (despite being
the only one for which a recommandation would have been interesting,
arguably)
As such, we have nothing to change for this paper. This paper is a DR
and clang always behaved reasonably.
---
clang/test/SemaCXX/cxx2c-attributes.cpp | 20 ++++++++++++++++++++
clang/www/cxx_status.html | 2 +-
2 files changed, 21 insertions(+), 1 deletion(-)
create mode 100644 clang/test/SemaCXX/cxx2c-attributes.cpp
diff --git a/clang/test/SemaCXX/cxx2c-attributes.cpp b/clang/test/SemaCXX/cxx2c-attributes.cpp
new file mode 100644
index 000000000000..c20a1b606a0f
--- /dev/null
+++ b/clang/test/SemaCXX/cxx2c-attributes.cpp
@@ -0,0 +1,20 @@
+// RUN: %clang_cc1 %s -x c++ -std=c++11 -triple x86_64-pc-linux -fsyntax-only -verify -Wno-c++17-extensions
+// RUN: %clang_cc1 %s -x c++ -std=c++11 -triple x86_64-windows-msvc -fsyntax-only -verify=msvc -Wno-c++17-extensions
+// expected-no-diagnostics
+
+// Check we return non-zero values for supported attributes as per
+// wg21.link/P2552
+static_assert(__has_cpp_attribute(assume));
+
+// The standard does not prescribe a behavior for [[carries_dependency]]
+
+static_assert(__has_cpp_attribute(deprecated));
+static_assert(__has_cpp_attribute(fallthrough));
+static_assert(__has_cpp_attribute(likely));
+static_assert(__has_cpp_attribute(unlikely));
+static_assert(__has_cpp_attribute(maybe_unused));
+static_assert(__has_cpp_attribute(nodiscard));
+static_assert(__has_cpp_attribute(noreturn));
+
+// We do not support [[no_unique_address]] in MSVC emulation mode
+static_assert(__has_cpp_attribute(no_unique_address)); // msvc-error {{static assertion failed}}
diff --git a/clang/www/cxx_status.html b/clang/www/cxx_status.html
index 1338f544ffcb..06777eaa6df6 100755
--- a/clang/www/cxx_status.html
+++ b/clang/www/cxx_status.html
@@ -130,7 +130,7 @@ C++23, informally referred to as C++26.
| On the ignorability of standard attributes |
P2552R3 (DR) |
- No |
+ Yes |
| Static storage for braced initializers |