On Wed, 27 Jun 2018, Martin Storsjö wrote:
On Tue, 26 Jun 2018, Jacek Caban wrote:
On 06/26/2018 01:44 PM, Martin Storsjö wrote:
On Tue, 26 Jun 2018, Jacek Caban wrote:
I still need to run some test, but I it seems ready for review.
The important change is __forceinline. We add extern to GCC macro,
because that matches closer intended behaviour. clang supports
__forceinline itself if -fms-extensions is used, so we should just leave
it to the compiler in that case (also __ptr32, __unaligned and __w64, so
I changed them as well while I was at it). Without -fms-extensions,
__always_inline__ is expected and as far as I can tell (and my testing
conforms that), it matches intended behaviour without additional
attributes.
Signed-off-by: Jacek Caban <[email protected]>
---
mingw-w64-headers/crt/_mingw.h.in | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
I think the patch is fine, but it took me a couple re-reads until I
got the full explanation of the commit message.
Sorry, I probably could explain that cleaner.
I can try to put this patch through test building of a number of
projects that I build with clang+mingw, I'll let you know how it goes.
Thanks would be great. Thanks!
I did a test build with this patch, and it failed at building winpthreads,
with the following error:
libtool: link: i686-w64-mingw32-clang -shared
src/.libs/libwinpthread_la-barrier.o src/.libs/libwinpthread_la-cond.o
src/.libs/libwinpthread_la-misc.o src/.libs/libwinp
thread_la-mutex.o src/.libs/libwinpthread_la-rwlock.o
src/.libs/libwinpthread_la-spinlock.o src/.libs/libwinpthread_la-thread.o
src/.libs/libwinpthread_la-ref.o src/.lib
s/libwinpthread_la-sem.o src/.libs/libwinpthread_la-sched.o
src/.libs/libwinpthread_la-clock.o src/.libs/libwinpthread_la-nanosleep.o
src/.libs/version.o -L./fakelib
-g -O2 -no-pthread -o .libs/libwinpthread-1.dll
-Wl,--enable-auto-image-base -Xlinker --out-implib -Xlinker
.libs/libwinpthread.dll.a
lld-link: error: duplicate symbol: _wcsnlen_s in
src/.libs/libwinpthread_la-barrier.o and in src/.libs/libwinpthread_la-cond.o
lld-link: error: duplicate symbol: _NtCurrentTeb in
src/.libs/libwinpthread_la-barrier.o and in src/.libs/libwinpthread_la-cond.o
lld-link: error: duplicate symbol: _GetCurrentFiber in
src/.libs/libwinpthread_la-barrier.o and in src/.libs/libwinpthread_la-cond.o
lld-link: error: duplicate symbol: _GetFiberData in
src/.libs/libwinpthread_la-barrier.o and in src/.libs/libwinpthread_la-cond.o
lld-link: error: duplicate symbol: _TpInitializeCallbackEnviron in
src/.libs/libwinpthread_la-barrier.o and in src/.libs/libwinpthread_la-cond.o
lld-link: error: duplicate symbol: _TpSetCallbackThreadpool in
src/.libs/libwinpthread_la-barrier.o and in src/.libs/libwinpthread_la-cond.o
lld-link: error: duplicate symbol: _TpSetCallbackCleanupGroup in
src/.libs/libwinpthread_la-barrier.o and in src/.libs/libwinpthread_la-cond.o
lld-link: error: duplicate symbol: _TpSetCallbackActivationContext in
src/.libs/libwinpthread_la-barrier.o and in src/.libs/libwinpthread_la-cond.o
lld-link: error: duplicate symbol: _TpSetCallbackNoActivationContext in
src/.libs/libwinpthread_la-barrier.o and in src/.libs/libwinpthread_la-cond.o
lld-link: error: duplicate symbol: _TpSetCallbackLongFunction in
src/.libs/libwinpthread_la-barrier.o and in src/.libs/libwinpthread_la-cond.o
lld-link: error: duplicate symbol: _TpSetCallbackRaceWithDll in
src/.libs/libwinpthread_la-barrier.o and in src/.libs/libwinpthread_la-cond.o
lld-link: error: duplicate symbol: _TpSetCallbackFinalizationCallback in
src/.libs/libwinpthread_la-barrier.o and in src/.libs/libwinpthread_la-cond.o
lld-link: error: duplicate symbol: _TpSetCallbackPersistent in
src/.libs/libwinpthread_la-barrier.o and in src/.libs/libwinpthread_la-cond.o
lld-link: error: duplicate symbol: _TpDestroyCallbackEnviron in
src/.libs/libwinpthread_la-barrier.o and in src/.libs/libwinpthread_la-cond.o
lld-link: error: duplicate symbol: __InterlockedAnd64 in
src/.libs/libwinpthread_la-barrier.o and in src/.libs/libwinpthread_la-cond.o
lld-link: error: duplicate symbol: __InterlockedOr64 in
src/.libs/libwinpthread_la-barrier.o and in src/.libs/libwinpthread_la-cond.o
lld-link: error: duplicate symbol: __InterlockedXor64 in
src/.libs/libwinpthread_la-barrier.o and in src/.libs/libwinpthread_la-cond.o
lld-link: error: duplicate symbol: __InterlockedIncrement64 in
src/.libs/libwinpthread_la-barrier.o and in src/.libs/libwinpthread_la-cond.o
lld-link: error: duplicate symbol: __InterlockedDecrement64 in
src/.libs/libwinpthread_la-barrier.o and in src/.libs/libwinpthread_la-cond.o
lld-link: error: duplicate symbol: __InterlockedExchange64 in
src/.libs/libwinpthread_la-barrier.o and in src/.libs/libwinpthread_la-cond.o
lld-link: error: too many errors emitted, stopping now (use /errorlimit:0 to
see all errors)
clang-7: error: linker command failed with exit code 1 (use -v to see
invocation)
Makefile:680: recipe for target 'libwinpthread.la' failed
make[2]: *** [libwinpthread.la] Error 1
And just to make it clear - this is code that builds fine with clang+lld
as things stand right now (without -fms-extensions anywhere).
What was the exact issue you're trying to fix by tweaking the
__forceinline define? And for the firefox case, did you fix it by adding
-fms-extensions?
I do remember running into a few issues with inlines in our headers,
behaving differently than with gcc - mainly in cases with non-static
inline. GCC would either emit the function (as inline so it doesn't
conflict with other definitions) or inline it totally. While clang on the
other hand would conclude that since it's non-static inline, there will be
a function definition elsewhere and just try to reference that (which
fails).
Those particular cases that I've run into, I've worked around so far in
one way or another though (but there's probably more of them that I
haven't happened to use, while firefox does), but I'm pretty sure the
headers rely on some aspects that aren't really guaranteed to behave in
that way, and in those cases, we maybe should fix the headers and how they
use inline.
// Martin
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Mingw-w64-public mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public