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

Reply via email to