-
Notifications
You must be signed in to change notification settings - Fork 14.3k
Rename [[clang::requires_explicit_initialization]] to [[clang::require_explicit_initialization]] #122947
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
…e_explicit_initialization]] to make it consistent with [[clang::require_constant_initialization]]
@llvm/pr-subscribers-clang Author: None (higher-performance) ChangesThis makes it consistent with (The attribute was just added to Clang a few minutes ago, so there are no users yet.) Full diff: https://github.com/llvm/llvm-project/pull/122947.diff 5 Files Affected:
diff --git a/clang/include/clang/AST/DeclBase.h b/clang/include/clang/AST/DeclBase.h
index 1c48c91bbe5a46..71ab9178509b2f 100644
--- a/clang/include/clang/AST/DeclBase.h
+++ b/clang/include/clang/AST/DeclBase.h
@@ -1671,7 +1671,7 @@ class DeclContext {
uint64_t HasNonTrivialToPrimitiveCopyCUnion : 1;
/// True if any field is marked as requiring explicit initialization with
- /// [[clang::requires_explicit_initialization]].
+ /// [[clang::require_explicit_initialization]].
/// In C++, this is also set for types without a user-provided default
/// constructor, and is propagated from any base classes and/or member
/// variables whose types are aggregates.
diff --git a/clang/include/clang/Basic/Attr.td b/clang/include/clang/Basic/Attr.td
index b7d9357e1b4e18..408d3adf370c85 100644
--- a/clang/include/clang/Basic/Attr.td
+++ b/clang/include/clang/Basic/Attr.td
@@ -1903,7 +1903,7 @@ def Leaf : InheritableAttr {
}
def ExplicitInit : InheritableAttr {
- let Spellings = [Clang<"requires_explicit_initialization">];
+ let Spellings = [Clang<"require_explicit_initialization">];
let Subjects = SubjectList<[Field], ErrorDiag>;
let Documentation = [ExplicitInitDocs];
let SimpleHandler = 1;
diff --git a/clang/include/clang/Basic/AttrDocs.td b/clang/include/clang/Basic/AttrDocs.td
index b949a105e13317..5e66e752512d0d 100644
--- a/clang/include/clang/Basic/AttrDocs.td
+++ b/clang/include/clang/Basic/AttrDocs.td
@@ -1687,7 +1687,7 @@ is not specified.
def ExplicitInitDocs : Documentation {
let Category = DocCatField;
let Content = [{
-The ``clang::requires_explicit_initialization`` attribute indicates that a
+The ``clang::require_explicit_initialization`` attribute indicates that a
field of an aggregate must be initialized explicitly by the user when an object
of the aggregate type is constructed. The attribute supports both C and C++,
but its usage is invalid on non-aggregates.
@@ -1704,13 +1704,13 @@ initializers exist):
.. code-block:: c++
struct Buffer {
- void *address [[clang::requires_explicit_initialization]];
- size_t length [[clang::requires_explicit_initialization]] = 0;
+ void *address [[clang::require_explicit_initialization]];
+ size_t length [[clang::require_explicit_initialization]] = 0;
};
struct ArrayIOParams {
- size_t count [[clang::requires_explicit_initialization]];
- size_t element_size [[clang::requires_explicit_initialization]];
+ size_t count [[clang::require_explicit_initialization]];
+ size_t element_size [[clang::require_explicit_initialization]];
int flags = 0;
};
diff --git a/clang/test/Sema/uninit-variables.c b/clang/test/Sema/uninit-variables.c
index bad2e14bd28cb8..6d79d419f72e79 100644
--- a/clang/test/Sema/uninit-variables.c
+++ b/clang/test/Sema/uninit-variables.c
@@ -554,16 +554,16 @@ struct full_of_empty empty_test_2(void) {
struct with_explicit_field {
int x;
- int y [[clang::requires_explicit_initialization]]; // #FIELD_Y
+ int y [[clang::require_explicit_initialization]]; // #FIELD_Y
};
struct with_explicit_array {
- [[clang::requires_explicit_initialization]] int arr[2]; // #FIELD_ARR
+ [[clang::require_explicit_initialization]] int arr[2]; // #FIELD_ARR
};
struct with_explicit_flex_array {
int x;
- [[clang::requires_explicit_initialization]] int flex_arr[]; // #FIELD_FLEX_ARR
+ [[clang::require_explicit_initialization]] int flex_arr[]; // #FIELD_FLEX_ARR
};
void aggregate() {
diff --git a/clang/test/SemaCXX/uninitialized.cpp b/clang/test/SemaCXX/uninitialized.cpp
index 95dd488e81a624..52d9897cf9be6e 100644
--- a/clang/test/SemaCXX/uninitialized.cpp
+++ b/clang/test/SemaCXX/uninitialized.cpp
@@ -1483,14 +1483,14 @@ struct Inherit : Bases... { // #TYPE_INHERIT
template<class... Bases>
struct InheritWithExplicit : Bases... { // #TYPE_INHERIT_WITH_EXPLICIT
- int g2 [[clang::requires_explicit_initialization]]; // #FIELD_G2
+ int g2 [[clang::require_explicit_initialization]]; // #FIELD_G2
};
struct Special {};
template<>
struct Inherit<Special> {
- int g3 [[clang::requires_explicit_initialization]]; // #FIELD_G3
+ int g3 [[clang::require_explicit_initialization]]; // #FIELD_G3
};
template<>
@@ -1501,23 +1501,23 @@ struct InheritWithExplicit<Special> {
void aggregate() {
struct NonAgg {
NonAgg() { }
- [[clang::requires_explicit_initialization]] int na; // expected-warning {{'requires_explicit_initialization' attribute is ignored in non-aggregate type 'NonAgg'}}
+ [[clang::require_explicit_initialization]] int na; // expected-warning {{'require_explicit_initialization' attribute is ignored in non-aggregate type 'NonAgg'}}
};
NonAgg nonagg; // no-warning
(void)nonagg;
struct S {
- [[clang::requires_explicit_initialization]] int s1; // #FIELD_S1
+ [[clang::require_explicit_initialization]] int s1; // #FIELD_S1
int s2;
int s3 = 12;
- [[clang::requires_explicit_initialization]] int s4 = 100; // #FIELD_S4
+ [[clang::require_explicit_initialization]] int s4 = 100; // #FIELD_S4
static void foo(S) { }
};
struct C {
#if __cplusplus < 202002L
// expected-warning@+1 {{explicit initialization of field 'c1' will not be enforced in C++20 and later because 'C' has a user-declared constructor, making the type no longer an aggregate}}
- [[clang::requires_explicit_initialization]]
+ [[clang::require_explicit_initialization]]
#endif
int c1; // #FIELD_C1
C() = default; // Test pre-C++20 aggregates
@@ -1525,7 +1525,7 @@ void aggregate() {
struct D : S { // #TYPE_D
int d1;
- int d2 [[clang::requires_explicit_initialization]]; // #FIELD_D2
+ int d2 [[clang::require_explicit_initialization]]; // #FIELD_D2
};
struct D2 : D { // #TYPE_D2
@@ -1533,10 +1533,10 @@ void aggregate() {
struct E { // #TYPE_E
int e1;
- D e2 [[clang::requires_explicit_initialization]]; // #FIELD_E2
+ D e2 [[clang::require_explicit_initialization]]; // #FIELD_E2
struct {
- [[clang::requires_explicit_initialization]] D e3;
- D2 e4 [[clang::requires_explicit_initialization]];
+ [[clang::require_explicit_initialization]] D e3;
+ D2 e4 [[clang::require_explicit_initialization]];
};
};
@@ -1636,7 +1636,7 @@ void aggregate() {
InheritWithExplicit<> agg; // expected-warning {{field in 'InheritWithExplicit<>' requires explicit initialization but is not explicitly initialized}} expected-note@#FIELD_G2 {{'g2' declared here}}
(void)agg;
- InheritWithExplicit<Polymorphic> polymorphic; // expected-warning@#FIELD_G2 {{'requires_explicit_initialization' attribute is ignored in non-aggregate type 'InheritWithExplicit<Polymorphic>'}}
+ InheritWithExplicit<Polymorphic> polymorphic; // expected-warning@#FIELD_G2 {{'require_explicit_initialization' attribute is ignored in non-aggregate type 'InheritWithExplicit<Polymorphic>'}}
(void)polymorphic;
Inherit<Special> specialized_explicit; // expected-warning {{field in 'Inherit<Special>' requires explicit initialization but is not explicitly initialized}} expected-note@#FIELD_G3 {{'g3' declared here}}
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM! Good catch
I'll land the changes once pre-commit CI comes back green (I expect it will; I didn't spot any places that were missed) |
LLVM Buildbot has detected a new failure on builder Full details are available at: https://lab.llvm.org/buildbot/#/builders/89/builds/14362 Here is the relevant piece of the build log for the reference
|
This makes it consistent with
[[clang::require_constant_initialization]]
.(The attribute was just added to Clang a few minutes ago, so there are no users yet.)