Author: Louis Dionne Date: 2025-01-20T13:27:20-05:00 New Revision: 64edde6648cc772c299dc4b39bb2ae7e4e294127
URL: https://github.com/llvm/llvm-project/commit/64edde6648cc772c299dc4b39bb2ae7e4e294127 DIFF: https://github.com/llvm/llvm-project/commit/64edde6648cc772c299dc4b39bb2ae7e4e294127.diff LOG: [clang] Improve the documentation for the init_priority attribute (#123098) The documentation wasn't very clear about whether ordering is controlled within or across TUs, and same for dylibs. Clarify that, and also add mentions for the state of support on Mach-O platforms. Added: Modified: clang/include/clang/Basic/AttrDocs.td Removed: ################################################################################ diff --git a/clang/include/clang/Basic/AttrDocs.td b/clang/include/clang/Basic/AttrDocs.td index 5e66e752512d0d..56a817892bbbaa 100644 --- a/clang/include/clang/Basic/AttrDocs.td +++ b/clang/include/clang/Basic/AttrDocs.td @@ -121,11 +121,12 @@ def InitPriorityDocs : Documentation { In C++, the order in which global variables are initialized across translation units is unspecified, unlike the ordering within a single translation unit. The ``init_priority`` attribute allows you to specify a relative ordering for the -initialization of objects declared at namespace scope in C++. The priority is -given as an integer constant expression between 101 and 65535 (inclusive). -Priorities outside of that range are reserved for use by the implementation. A -lower value indicates a higher priority of initialization. Note that only the -relative ordering of values is important. For example: +initialization of objects declared at namespace scope in C++ within a single +linked image on supported platforms. The priority is given as an integer constant +expression between 101 and 65535 (inclusive). Priorities outside of that range are +reserved for use by the implementation. A lower value indicates a higher priority +of initialization. Note that only the relative ordering of values is important. +For example: .. code-block:: c++ @@ -136,10 +137,16 @@ relative ordering of values is important. For example: ``Obj2`` will be initialized *before* ``Obj1`` despite the usual order of initialization being the opposite. +Note that this attribute does not control the initialization order of objects +across final linked image boundaries like shared objects and executables. + On Windows, ``init_seg(compiler)`` is represented with a priority of 200 and ``init_seg(library)`` is represented with a priority of 400. ``init_seg(user)`` uses the default 65535 priority. +On MachO platforms, this attribute also does not control the order of initialization +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. }]; _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits