Author: Zibi Sarbinowski Date: 2026-05-29T14:51:31-04:00 New Revision: a20c21b8bedc0492ea7f78e5bc72b805d47b0520
URL: https://github.com/llvm/llvm-project/commit/a20c21b8bedc0492ea7f78e5bc72b805d47b0520 DIFF: https://github.com/llvm/llvm-project/commit/a20c21b8bedc0492ea7f78e5bc72b805d47b0520.diff LOG: [clang] Enable GNU __attribute__((init_priority(...))) on z/OS. (#199573) Enable `init_priority` on z/OS Motivation The recent addition of `clang/test/Sema/type-dependent-attrs.cpp` in https://github.com/llvm/llvm-project/pull/182208 started failing on z/OS. That test uses `[[gnu::init_priority(2000)]]`, and the failure exposed that init_priority support was still disabled for z/OS in `Attr.td`. What changed - Enabled init_priority for z/OS in `clang/include/clang/Basic/Attr.td` - Updated `clang/test/SemaCXX/init-priority-attr.cpp` so z/OS now expects normal semantic handling for init_priority This reverts commit 2c7e24c4b6893a93ddb2b2cca91eaf5bf7956965 and preserve any changes done after this commit. Added: Modified: clang/include/clang/Basic/Attr.td clang/include/clang/Basic/AttrDocs.td clang/test/SemaCXX/init-priority-attr.cpp Removed: ################################################################################ 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..d59f1a5a2a231 100644 --- a/clang/test/SemaCXX/init-priority-attr.cpp +++ b/clang/test/SemaCXX/init-priority-attr.cpp @@ -1,8 +1,6 @@ -// 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 +// RUN: %clang_cc1 -fsyntax-only -DNOERROR -Wno-error=init-priority-reserved -verify %s #if defined(SYSTEM) #5 "init-priority-attr.cpp" 3 // system header @@ -28,13 +26,10 @@ 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) @@ -43,27 +38,19 @@ Two coo[2] __attribute__((init_priority(100))); #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}} 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 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; _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
