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