Skip to content
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 12 additions & 5 deletions clang/include/clang/Basic/AttrDocs.td
Original file line number Diff line number Diff line change
Expand Up @@ -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++, even between translation
units (but within a single final linked image). The priority is given as an integer
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I feel this reads better:

... declared at namespace scope in C++ with in a single linked image on supported platforms

I am unsure about how COFF support is, does that work across all .dlls? If Windows actually works across boundaries, this needs to be revised.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I agree this reads better. I am not certain about how this is handled with DLLs, maybe someone like @rnk would know?

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

From my understanding from the windows document, I don't think that work across the DLLs (meaning grouping the init from the same priority group from different DLL together). Updates LGTM.

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++

Expand All @@ -136,12 +137,18 @@ 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.

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.
This attribute also does not control the order of initialization across
translation units on Mach-O platforms, where it only affects the order within
a single TU.
}];
}

Expand Down
Loading