libstdc++: Use init_priority attribute for Init object [PR 98108]

This causes the global objects that run the <iostream> initialization
code to be constructed earlier, which avoids some bugs in user code due
to incorrectly relying on static initialization order.

libstdc++-v3/ChangeLog:

	PR libstdc++/98108
	* include/std/iostream (__ioinit): Add init_priority attribute.
This commit is contained in:
Jonathan Wakely 2020-12-15 11:40:06 +00:00
parent 0feb237657
commit cf4ed3b415
1 changed files with 9 additions and 1 deletions

View File

@ -70,8 +70,16 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
#endif
//@}
#if __has_attribute(__init_priority__)
# define _GLIBCXX_INIT_PRIO(N) __attribute__((__init_priority__(N)))
#else
# define _GLIBCXX_INIT_PRIO(N)
#endif
// For construction of filebuffers for cout, cin, cerr, clog et. al.
static ios_base::Init __ioinit;
static ios_base::Init __ioinit _GLIBCXX_INIT_PRIO(90);
#undef _GLIBCXX_INIT_PRIO
_GLIBCXX_END_NAMESPACE_VERSION
} // namespace