aboutsummaryrefslogtreecommitdiff
path: root/libstdc++-v3
diff options
context:
space:
mode:
authorJonathan Wakely <jwakely@redhat.com>2020-12-15 11:40:06 +0000
committerJonathan Wakely <jwakely@redhat.com>2020-12-15 11:45:26 +0000
commitcf4ed3b41594b6935a337fe0aaf8149eadf88751 (patch)
tree3d934dff704957a63747ace1eddd8cefa2503c25 /libstdc++-v3
parent0feb237657c7c1f057754a8d8132a83adc63250e (diff)
downloadgcc-cf4ed3b41594b6935a337fe0aaf8149eadf88751.zip
gcc-cf4ed3b41594b6935a337fe0aaf8149eadf88751.tar.gz
gcc-cf4ed3b41594b6935a337fe0aaf8149eadf88751.tar.bz2
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.
Diffstat (limited to 'libstdc++-v3')
-rw-r--r--libstdc++-v3/include/std/iostream10
1 files changed, 9 insertions, 1 deletions
diff --git a/libstdc++-v3/include/std/iostream b/libstdc++-v3/include/std/iostream
index f988342..6b2f964 100644
--- a/libstdc++-v3/include/std/iostream
+++ b/libstdc++-v3/include/std/iostream
@@ -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