[Bug driver/103949] gcc fails to provide a standard conforming C11 or C++17 environment even when specifying -std=c11 or -std=c++17

manx-bugzilla at problemloesungsmaschine dot de gcc-bugzilla@gcc.gnu.org
Sat Jan 8 19:06:35 GMT 2022


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103949

--- Comment #8 from Jörn Heusipp <manx-bugzilla at problemloesungsmaschine dot de> ---

> Note in newer versions of glibc, libpthread is all intergrated into libc and
> there is no issues again.
> 
> For Mac OS X/darwin you don't need -lm -pthread because libc has it.

Two examples where it works by chance is not sufficient to invalidate my point
about the general case.

> >gcc libstdc++ implements std::thread. So what's your point again?
> 
> Because it implements it on top of pthreads.

Yeah, so that is an implementation detail because of which I am required to
pass -pthread. Why should the user of gcc even care how std::thread is
implemented? It literally makes no sense. You are supporting my point.

> While C threads is implemented
> inside the libc.

If it was implemented in libc, I would not be seeing "c11.c:(.text+0x53):
undefined reference to `thrd_create'". Something is wrong with your argument. I
actually do not know where it is implemented. And I should not be needing to
know. Again, you are supporting my point.

> If you want __STDC_NO_THREADS defined file a bug about that but gcc will need to record which versions of glibc has C11 thread defined or not.

The compiler is required to know that by the C standard.

> You could use __has_include extension which will handle that mostly for you really.

That's not how the C standard specifies to do to check for thread support.

> I still think this should not be done on the GCC side as it is
> changing/fixing on the glibc side of things already.

There are more platforms that GCC targets than just glibc. glibc alone cannot
fix the general case.

> In the case of mingw, the problem is how GCC was configured:

Debian MinGW-w64 gcc is built in 2 flavours. One with Win32 and one with posix
threading model support. The version with posix threading model support uses
pthreads, and knows how to implement std::thread. Why is GCC assuming
single-threaded in that context? That seems like a broken configuration to me
that gcc should not allow to be buildable, which looks like a bug to me. (or I
am misunderstanding what you are saying)


More information about the Gcc-bugs mailing list