This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: Is init_priority file scope or global scope?
- From: Ian Lance Taylor <iant at google dot com>
- To: "H.J. Lu" <hjl dot tools at gmail dot com>
- Cc: GCC Development <gcc at gcc dot gnu dot org>
- Date: Mon, 13 Dec 2010 11:28:43 -0800
- Subject: Re: Is init_priority file scope or global scope?
- References: <AANLkTimB0GKS9XC4Nh9DmVjhwrfewxPoXQQBv60B31m3@mail.gmail.com>
"H.J. Lu" <hjl.tools@gmail.com> writes:
> Using .init_array section on Linux/x86 raised a question on
> init_priority. GCC manual says
>
> `init_priority (PRIORITY)'
> In Standard C++, objects defined at namespace scope are guaranteed
> to be initialized in an order in strict accordance with that of
> their definitions _in a given translation unit_. No guarantee is
> made for initializations across translation units. However, GNU
> C++ allows users to control the order of initialization of objects
> defined at namespace scope with the `init_priority' attribute by
> specifying a relative PRIORITY, a constant integral expression
> currently bounded between 101 and 65535 inclusive. Lower numbers
> indicate a higher priority.
>
> In the following example, `A' would normally be created before
> `B', but the `init_priority' attribute has reversed that order:
>
> Some_Class A __attribute__ ((init_priority (2000)));
> Some_Class B __attribute__ ((init_priority (543)));
>
> Note that the particular values of PRIORITY do not matter; only
> their relative ordering.
>
> Is init_priority file scope or global scope? I consider init_priority is
> file scope. Is that a correct assumption?
No. That would be useless. init_priority has global scope. That is
what it was designed for.
The documentation could be more clear, but it is clearly saying "C++
specifies the order in a translation unit, init_priority specifies the
order across translation units."
Ian