On Wed, Apr 21, 2021 at 08:28:56PM +0200, Jakub Jelinek wrote: > On Wed, Apr 21, 2021 at 08:04:18PM +0200, Martin Liška wrote: > > Hello. > > > > There's a patch attempt for the problem with > > std::thread::hardware_concurrency where > > it's used only if _GLIBCXX_HAS_GTHREADS is set. > > > > Does it help? > > Thanks, > > Martin > > > > gcc/ChangeLog: > > > > PR bootstrap/100186 > > * lto-wrapper.c: Use hardware_concurrency only if > > _GLIBCXX_HAS_GTHREADS. > > --- > > gcc/lto-wrapper.c | 6 +++++- > > 1 file changed, 5 insertions(+), 1 deletion(-) > > > > diff --git a/gcc/lto-wrapper.c b/gcc/lto-wrapper.c > > index 6ba401007f6..8a85b3e93a8 100644 > > --- a/gcc/lto-wrapper.c > > +++ b/gcc/lto-wrapper.c > > @@ -1285,7 +1285,11 @@ run_gcc (unsigned argc, char *argv[]) > > static char current_dir[] = { '.', DIR_SEPARATOR, '\0' }; > > > > /* Number of CPUs that can be used for parallel LTRANS phase. */ > > - unsigned long nthreads_var = std::thread::hardware_concurrency (); > > + unsigned long nthreads_var = 0; > > + > > +#ifdef _GLIBCXX_HAS_GTHREADS > > + nthreads_var = std::thread::hardware_concurrency (); > > +#endif > > _GLIBCXX_HAS_GTHREADS is a libstdc++ internal macro, it shouldn't be used > outside of libstdc++. > And, when using some other compiler or standard C++ library, nthreads_var > will be always 0. That isn't an improvement.
Not to mention that it won't work properly for system GCC 4.8 - 9.x where defined(_GLIBCXX_HAS_GTHREADS) doesn't imply std::thread is available. Jakub