https://github.com/zibi2 updated https://github.com/llvm/llvm-project/pull/199573
>From b741afed58a69460bbe4d9979f8143993fd801cf Mon Sep 17 00:00:00 2001 From: Zibi Sarbinowski <[email protected]> Date: Mon, 25 May 2026 16:08:25 -0400 Subject: [PATCH 1/4] Revert "Guard init_priority attribute within libc++" This reverts commit 2c7e24c4b6893a93ddb2b2cca91eaf5bf7956965. Conflicts: clang/include/clang/Basic/Attr.td clang/test/SemaCXX/init-priority-attr.cpp libcxx/include/__config libcxx/src/experimental/memory_resource.cpp libcxx/src/iostream.cpp --- clang/include/clang/Basic/Attr.td | 6 +---- clang/include/clang/Basic/AttrDocs.td | 2 +- clang/test/SemaCXX/init-priority-attr.cpp | 32 +++++------------------ libcxx/src/iostream_init.h | 2 +- 4 files changed, 9 insertions(+), 33 deletions(-) diff --git a/clang/include/clang/Basic/Attr.td b/clang/include/clang/Basic/Attr.td index 70b5773f95b08..32f72e8da960e 100644 --- a/clang/include/clang/Basic/Attr.td +++ b/clang/include/clang/Basic/Attr.td @@ -535,10 +535,6 @@ def TargetWindowsArm64EC : TargetSpec { let CustomCode = [{ Target.getTriple().isWindowsArm64EC() }]; } -def TargetSupportsInitPriority : TargetSpec { - let CustomCode = [{ !Target.getTriple().isOSzOS() }]; -} - class TargetSpecificSpelling<TargetSpec target, list<Spelling> spellings> { TargetSpec Target = target; list<Spelling> Spellings = spellings; @@ -3323,7 +3319,7 @@ def WorkGroupSizeHint : InheritableAttr { let Documentation = [Undocumented]; } -def InitPriority : InheritableAttr, TargetSpecificAttr<TargetSupportsInitPriority> { +def InitPriority : InheritableAttr { let Spellings = [GCC<"init_priority", /*AllowInC*/0>]; let Args = [UnsignedArgument<"Priority">]; let Subjects = SubjectList<[Var], ErrorDiag>; diff --git a/clang/include/clang/Basic/AttrDocs.td b/clang/include/clang/Basic/AttrDocs.td index 87b9053be7cb6..6eae86b7f7f16 100644 --- a/clang/include/clang/Basic/AttrDocs.td +++ b/clang/include/clang/Basic/AttrDocs.td @@ -158,7 +158,7 @@ On MachO platforms, this attribute also does not control the order of initializa across translation units, where it only affects the order within a single TU. This attribute is only supported for C++ and Objective-C++ and is ignored in -other language modes. Currently, this attribute is not implemented on z/OS. +other language modes. }]; } diff --git a/clang/test/SemaCXX/init-priority-attr.cpp b/clang/test/SemaCXX/init-priority-attr.cpp index c5fab7b42502e..9d574e0fb8654 100644 --- a/clang/test/SemaCXX/init-priority-attr.cpp +++ b/clang/test/SemaCXX/init-priority-attr.cpp @@ -1,8 +1,5 @@ -// RUN: %clang_cc1 -triple=x86_64-unknown-unknown -fsyntax-only -verify %s -// RUN: %clang_cc1 -triple=x86_64-unknown-unknown -fsyntax-only -DSYSTEM -verify %s -// RUN: %clang_cc1 -triple=x86_64-unknown-unknown -fsyntax-only -DNOERROR -Wno-error=init-priority-reserved -verify %s -// RUN: %clang_cc1 -triple=s390x-none-zos -fsyntax-only -verify=unknown %s -// RUN: %clang_cc1 -triple=s390x-none-zos -fsyntax-only -DSYSTEM -verify=unknown-system %s +// RUN: %clang_cc1 -fsyntax-only -verify %s +// RUN: %clang_cc1 -fsyntax-only -DSYSTEM -verify %s #if defined(SYSTEM) #5 "init-priority-attr.cpp" 3 // system header @@ -28,42 +25,25 @@ extern Two koo[]; // unknown-system-no-diagnostics Two foo __attribute__((init_priority(101))) ( 5, 6 ); -// unknown-warning@-1 {{unknown attribute 'init_priority' ignored}} - -Two loo __attribute__((init_priority(65535))) ( 5, 6 ); -// unknown-warning@-1 {{unknown attribute 'init_priority' ignored}} Two goo __attribute__((init_priority(2,3))) ( 5, 6 ); // expected-error {{'init_priority' attribute takes one argument}} -// unknown-warning@-1 {{unknown attribute 'init_priority' ignored}} Two coo[2] __attribute__((init_priority(100))); #if !defined(SYSTEM) -#if !defined(NOERROR) - // expected-error@-3 {{requested 'init_priority' 100 is reserved for internal use}} -#else // defined(NOERROR) - // expected-warning@-5 {{requested 'init_priority' 100 is reserved for internal use}} -#endif // !defined(NOERROR) - // unknown-warning@-7 {{unknown attribute 'init_priority' ignored}} -#endif // !defined(SYSTEM) - -Two zoo[2] __attribute__((init_priority(-1))); // expected-error {{'init_priority' attribute requires integer constant between 0 and 65535 inclusive}} -// unknown-warning@-1 {{unknown attribute 'init_priority' ignored}} +// expected-error@-2 {{'init_priority' 100 is reserved for internal use}} +#endif -Two boo[2] __attribute__((init_priority(65536))); // expected-error {{'init_priority' attribute requires integer constant between 0 and 65535 inclusive}} -// unknown-warning@-1 {{unknown attribute 'init_priority' ignored}} +Two boo[2] __attribute__((init_priority(65536))); +// expected-error@-1 {{'init_priority' attribute requires integer constant between 0 and 65535 inclusive}} Two koo[4] __attribute__((init_priority(1.13))); // expected-error {{'init_priority' attribute requires an integer constant}} -// unknown-warning@-1 {{unknown attribute 'init_priority' ignored}} Two func() __attribute__((init_priority(1001))); // expected-error {{'init_priority' attribute only applies to variables}} -// unknown-warning@-1 {{unknown attribute 'init_priority' ignored}} int i __attribute__((init_priority(1001))); // expected-error {{can only use 'init_priority' attribute on file-scope definitions of objects of class type}} -// unknown-warning@-1 {{unknown attribute 'init_priority' ignored}} int main() { Two foo __attribute__((init_priority(1001))); // expected-error {{can only use 'init_priority' attribute on file-scope definitions of objects of class type}} -// unknown-warning@-1 {{unknown attribute 'init_priority' ignored}} } struct S1 {} s1; diff --git a/libcxx/src/iostream_init.h b/libcxx/src/iostream_init.h index 7d1bb5c2d7d87..ac1961edab9e1 100644 --- a/libcxx/src/iostream_init.h +++ b/libcxx/src/iostream_init.h @@ -1,2 +1,2 @@ #pragma GCC system_header -_LIBCPP_HIDDEN ios_base::Init __start_std_streams _LIBCPP_INIT_PRIORITY_MAX; +_LIBCPP_HIDDEN ios_base::Init __start_std_streams __attribute__((init_priority(101))); >From 429b563b8ff4a289b716da3edccbfc363aadd48f Mon Sep 17 00:00:00 2001 From: Zibi Sarbinowski <[email protected]> Date: Tue, 26 May 2026 09:33:34 -0400 Subject: [PATCH 2/4] Using _LIBCPP_INIT_PRIORITY_MAX macro is preferable --- libcxx/src/iostream_init.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libcxx/src/iostream_init.h b/libcxx/src/iostream_init.h index ac1961edab9e1..7d1bb5c2d7d87 100644 --- a/libcxx/src/iostream_init.h +++ b/libcxx/src/iostream_init.h @@ -1,2 +1,2 @@ #pragma GCC system_header -_LIBCPP_HIDDEN ios_base::Init __start_std_streams __attribute__((init_priority(101))); +_LIBCPP_HIDDEN ios_base::Init __start_std_streams _LIBCPP_INIT_PRIORITY_MAX; >From 8ddc4864ab4628c8382e18737ac6d5ef8781caf9 Mon Sep 17 00:00:00 2001 From: Zibi Sarbinowski <[email protected]> Date: Tue, 26 May 2026 13:49:03 -0400 Subject: [PATCH 3/4] Add a deleted variation of the lit back --- clang/test/SemaCXX/init-priority-attr.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/clang/test/SemaCXX/init-priority-attr.cpp b/clang/test/SemaCXX/init-priority-attr.cpp index 9d574e0fb8654..585b4cb70fcc3 100644 --- a/clang/test/SemaCXX/init-priority-attr.cpp +++ b/clang/test/SemaCXX/init-priority-attr.cpp @@ -1,5 +1,6 @@ // RUN: %clang_cc1 -fsyntax-only -verify %s // RUN: %clang_cc1 -fsyntax-only -DSYSTEM -verify %s +// RUN: %clang_cc1 -fsyntax-only -DNOERROR -Wno-error=init-priority-reserved -verify %s #if defined(SYSTEM) #5 "init-priority-attr.cpp" 3 // system header @@ -29,8 +30,10 @@ Two foo __attribute__((init_priority(101))) ( 5, 6 ); Two goo __attribute__((init_priority(2,3))) ( 5, 6 ); // expected-error {{'init_priority' attribute takes one argument}} Two coo[2] __attribute__((init_priority(100))); -#if !defined(SYSTEM) -// expected-error@-2 {{'init_priority' 100 is reserved for internal use}} +#if defined(NOERROR) +// expected-warning@-2 {{requested 'init_priority' 100 is reserved for internal use}} +#elif !defined(SYSTEM) +// expected-error@-4 {{requested 'init_priority' 100 is reserved for internal use}} #endif Two boo[2] __attribute__((init_priority(65536))); >From e70cd8b793c48bc3cd289c7eb2aedc769b939010 Mon Sep 17 00:00:00 2001 From: Zibi Sarbinowski <[email protected]> Date: Wed, 27 May 2026 08:44:11 -0400 Subject: [PATCH 4/4] Make the diff smaller --- clang/test/SemaCXX/init-priority-attr.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/clang/test/SemaCXX/init-priority-attr.cpp b/clang/test/SemaCXX/init-priority-attr.cpp index 585b4cb70fcc3..a51bf4be4ac26 100644 --- a/clang/test/SemaCXX/init-priority-attr.cpp +++ b/clang/test/SemaCXX/init-priority-attr.cpp @@ -35,9 +35,9 @@ Two coo[2] __attribute__((init_priority(100))); #elif !defined(SYSTEM) // expected-error@-4 {{requested 'init_priority' 100 is reserved for internal use}} #endif +Two zoo[2] __attribute__((init_priority(-1))); // expected-error {{'init_priority' attribute requires integer constant between 0 and 65535 inclusive}} -Two boo[2] __attribute__((init_priority(65536))); -// expected-error@-1 {{'init_priority' attribute requires integer constant between 0 and 65535 inclusive}} +Two boo[2] __attribute__((init_priority(65536))); // expected-error {{'init_priority' attribute requires integer constant between 0 and 65535 inclusive}} Two koo[4] __attribute__((init_priority(1.13))); // expected-error {{'init_priority' attribute requires an integer constant}} _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
