[Issue 16536] DMD master does not build on OS X 10.11.6/Xcode 7.3.1
https://issues.dlang.org/show_bug.cgi?id=16536 --- Comment #20 from github-bugzi...@puremagic.com --- Commits pushed to newCTFE at https://github.com/dlang/dmd https://github.com/dlang/dmd/commit/3b34132a9dd6fd3ac6bd32c572dc6a9c2a75b8f8 fix Issue 16536 - OSX mangling mismatch in dmd's C++/D ABI https://github.com/dlang/dmd/commit/131668b53dea8833e1d922f180800793e30703f2 Merge pull request #6180 from MartinNowak/fix16536 https://github.com/dlang/dmd/commit/01a60612755c505350ebd26e701f46ec48255eda fix OSX64 ABI mismatch with divcoeff --
[Issue 16536] DMD master does not build on OS X 10.11.6/Xcode 7.3.1
https://issues.dlang.org/show_bug.cgi?id=16536 --- Comment #19 from github-bugzi...@puremagic.com --- Commits pushed to master at https://github.com/dlang/dmd https://github.com/dlang/dmd/commit/3b34132a9dd6fd3ac6bd32c572dc6a9c2a75b8f8 fix Issue 16536 - OSX mangling mismatch in dmd's C++/D ABI https://github.com/dlang/dmd/commit/131668b53dea8833e1d922f180800793e30703f2 Merge pull request #6180 from MartinNowak/fix16536 https://github.com/dlang/dmd/commit/01a60612755c505350ebd26e701f46ec48255eda fix OSX64 ABI mismatch with divcoeff --
[Issue 16536] DMD master does not build on OS X 10.11.6/Xcode 7.3.1
https://issues.dlang.org/show_bug.cgi?id=16536 --- Comment #18 from github-bugzi...@puremagic.com --- Commit pushed to stable at https://github.com/dlang/dmd https://github.com/dlang/dmd/commit/01a60612755c505350ebd26e701f46ec48255eda fix OSX64 ABI mismatch with divcoeff - also apply fix from #6180 (Issue 16536) to divcoeff.c - add comment that declarations must be kept in sync --
[Issue 16536] DMD master does not build on OS X 10.11.6/Xcode 7.3.1
https://issues.dlang.org/show_bug.cgi?id=16536 --- Comment #17 from Steven Schveighoffer--- And now: Undefined symbols for architecture x86_64: "choose_multiplier(int, unsigned long, int, unsigned long*, int*)", referenced from: cdmul(elem*, unsigned int*) in backend.a(cod2.o) "udiv_coefficients(int, unsigned long, int*, unsigned long*, int*)", referenced from: cdmul(elem*, unsigned int*) in backend.a(cod2.o) ld: symbol(s) not found for architecture x86_64 Looks like the prototype in cod2.c does not match the type (one is targ_ullong, one is ullong). I tried the obvious fix of changing the prototype in cod2.c, but it complains of not knowing what ullong is there. I'll let the more experienced take this :) --
[Issue 16536] DMD master does not build on OS X 10.11.6/Xcode 7.3.1
https://issues.dlang.org/show_bug.cgi?id=16536 --- Comment #16 from github-bugzi...@puremagic.com --- Commits pushed to stable at https://github.com/dlang/dmd https://github.com/dlang/dmd/commit/3b34132a9dd6fd3ac6bd32c572dc6a9c2a75b8f8 fix Issue 16536 - OSX mangling mismatch in dmd's C++/D ABI - just fix the specific dmd problem of picking up UINT64_TYPE (unsigned long long) on newer XCode/clang versions - the D mangling of ulong should eventually be fixed to always match uint64_t https://github.com/dlang/dmd/commit/131668b53dea8833e1d922f180800793e30703f2 Merge pull request #6180 from MartinNowak/fix16536 fix Issue 16536 - OSX mangling mismatch in dmd's C++/D ABI --
[Issue 16536] DMD master does not build on OS X 10.11.6/Xcode 7.3.1
https://issues.dlang.org/show_bug.cgi?id=16536 github-bugzi...@puremagic.com changed: What|Removed |Added Status|NEW |RESOLVED Resolution|--- |FIXED --
[Issue 16536] DMD master does not build on OS X 10.11.6/Xcode 7.3.1
https://issues.dlang.org/show_bug.cgi?id=16536 Martin Nowakchanged: What|Removed |Added Keywords||pull --- Comment #15 from Martin Nowak --- https://github.com/dlang/dmd/pull/6180 --
[Issue 16536] DMD master does not build on OS X 10.11.6/Xcode 7.3.1
https://issues.dlang.org/show_bug.cgi?id=16536 --- Comment #14 from Martin Nowak--- (In reply to Martin Nowak from comment #13) > Let's please answer the question of comment 1, which typedef is active. > Looks like you have a __UINT64_TYPE__ long long unsigned int now. Indeed the __UINT64_TYPE__ isn't present on my version of XCode/clang. It seems the better fix would be to rely on and always use uint64_t. That would be unsigned long long, so we'd need to change D's ulong to match that. I'll go with a workaround for newer XCode versions for now, but this needs to be sorted out clearly. --
[Issue 16536] DMD master does not build on OS X 10.11.6/Xcode 7.3.1
https://issues.dlang.org/show_bug.cgi?id=16536 --- Comment #13 from Martin Nowak--- Let's please answer the question of comment 1, which typedef is active. Looks like you have a __UINT64_TYPE__ long long unsigned int now. --
[Issue 16536] DMD master does not build on OS X 10.11.6/Xcode 7.3.1
https://issues.dlang.org/show_bug.cgi?id=16536 --- Comment #12 from Jacob Carlborg--- I have the same error with Clang 7.0.2 as well. I also have the same output. --
[Issue 16536] DMD master does not build on OS X 10.11.6/Xcode 7.3.1
https://issues.dlang.org/show_bug.cgi?id=16536 --- Comment #9 from Martin Nowak--- Looks like the difference between Xcode 7.3.x and older versions (tried 5.1.1) is the lack of __UINTMAX_TYPE__. Strangely David reports __UINTMAX_TYPE__ to be "long unsigned int" (compatible w/ dmd's ulong). Could someone who can reproduce the problem please run. touch test.c clang -dM -E test.c | grep UINTMAX prints #define __UINTMAX_TYPE__ long unsigned int for me. --
[Issue 16536] DMD master does not build on OS X 10.11.6/Xcode 7.3.1
https://issues.dlang.org/show_bug.cgi?id=16536 --- Comment #11 from Steven Schveighoffer--- (In reply to David Nadlinger from comment #10) > Just for the sake of completeness, I still get the same in both C and C++ > mode > I get the same. --
[Issue 16536] DMD master does not build on OS X 10.11.6/Xcode 7.3.1
https://issues.dlang.org/show_bug.cgi?id=16536 --- Comment #10 from David Nadlinger--- (In reply to Martin Nowak from comment #9) > Looks like the difference between Xcode 7.3.x and older versions (tried > 5.1.1) is the lack of __UINTMAX_TYPE__. > Strangely David reports __UINTMAX_TYPE__ to be "long unsigned int" > (compatible w/ dmd's ulong). > > Could someone who can reproduce the problem […] Just for the sake of completeness, I still get the same in both C and C++ mode $ clang -dM -E test.c | grep UINTMAX #define __UINTMAX_C_SUFFIX__ UL #define __UINTMAX_FMTX__ "lX" #define __UINTMAX_FMTo__ "lo" #define __UINTMAX_FMTu__ "lu" #define __UINTMAX_FMTx__ "lx" #define __UINTMAX_MAX__ 18446744073709551615UL #define __UINTMAX_TYPE__ long unsigned int #define __UINTMAX_WIDTH__ 64 $ clang++ -dM -E test.cpp | grep UINTMAX #define __UINTMAX_C_SUFFIX__ UL #define __UINTMAX_FMTX__ "lX" #define __UINTMAX_FMTo__ "lo" #define __UINTMAX_FMTu__ "lu" #define __UINTMAX_FMTx__ "lx" #define __UINTMAX_MAX__ 18446744073709551615UL #define __UINTMAX_TYPE__ long unsigned int #define __UINTMAX_WIDTH__ 64 --
[Issue 16536] DMD master does not build on OS X 10.11.6/Xcode 7.3.1
https://issues.dlang.org/show_bug.cgi?id=16536 Martin Nowakchanged: What|Removed |Added CC||timothee.co...@gmail.com --- Comment #8 from Martin Nowak --- *** Issue 16596 has been marked as a duplicate of this issue. *** --
[Issue 16536] DMD master does not build on OS X 10.11.6/Xcode 7.3.1
https://issues.dlang.org/show_bug.cgi?id=16536 Martin Nowakchanged: What|Removed |Added CC||c...@dawg.eu --- Comment #7 from Martin Nowak --- Well, from the error message, it seems to me we're using `unsigned long long` on the C side (typedef unsigned long long targ_ullong), but `unsigned long` on the D side (alias targ_ullong = ulong). (In reply to Jacob Carlborg from comment #6) > I manually patch the compiler by replacing targ_size_t with size_t/d_size_t > where the linker complains. I could create a PR but I don't know if it's the > correct solution. Well we want to always use unsigned long long on both sides (and for 32 and 64-bit dmds), b/c it must be able to hold any target's size_t (hence the name targ_size_t). It's a slightly different problem than the fix for Issue 16000 https://github.com/dlang/dmd/pull/5788/files#diff-5910c4bad5eadf90caa32a46ab678aa0R12, where we wanted size_t (4/8 bytes depending on 32/64-bit dmd) on both sides. Not too sure, but I guess if you `typedef unsigned long targ_ullong` on OSX/64 it should work, but that stuff starts to become really messy. --
[Issue 16536] DMD master does not build on OS X 10.11.6/Xcode 7.3.1
https://issues.dlang.org/show_bug.cgi?id=16536 --- Comment #6 from Jacob Carlborg--- I manually patch the compiler by replacing targ_size_t with size_t/d_size_t where the linker complains. I could create a PR but I don't know if it's the correct solution. --
[Issue 16536] DMD master does not build on OS X 10.11.6/Xcode 7.3.1
https://issues.dlang.org/show_bug.cgi?id=16536 John Colvinchanged: What|Removed |Added CC||john.loughran.colvin@gmail. ||com --- Comment #5 from John Colvin --- This is preventing testing 2.072.0-b1 on os x. --
[Issue 16536] DMD master does not build on OS X 10.11.6/Xcode 7.3.1
https://issues.dlang.org/show_bug.cgi?id=16536 Steven Schveighofferchanged: What|Removed |Added CC||schvei...@yahoo.com --
[Issue 16536] DMD master does not build on OS X 10.11.6/Xcode 7.3.1
https://issues.dlang.org/show_bug.cgi?id=16536 --- Comment #4 from Jacob Carlborg--- Should it be using d_size_t instead of targ_ullong? --
[Issue 16536] DMD master does not build on OS X 10.11.6/Xcode 7.3.1
https://issues.dlang.org/show_bug.cgi?id=16536 Jacob Carlborgchanged: What|Removed |Added CC||d...@me.com --- Comment #3 from Jacob Carlborg --- Same problem with Xcode/Clang 8. I looks like "size_t" is defined as "__SIZE_TYPE__" which is defined as "long unsigned int". Replacing defining "targ_ullong" as "size_t" fixes the problem for 64bit, but not for 32bit. --
[Issue 16536] DMD master does not build on OS X 10.11.6/Xcode 7.3.1
https://issues.dlang.org/show_bug.cgi?id=16536 --- Comment #2 from David Nadlinger--- I'm using the stock Apple Clang shipped with Xcode 7.3.1. Is this the unsigned long vs. unsigned long long mangling problem coming back to haunt us again? --- $ clang -dM -E test.cpp #define OBJC_NEW_PROPERTIES 1 #define _LP64 1 #define __APPLE_CC__ 6000 #define __APPLE__ 1 #define __ATOMIC_ACQUIRE 2 #define __ATOMIC_ACQ_REL 4 #define __ATOMIC_CONSUME 1 #define __ATOMIC_RELAXED 0 #define __ATOMIC_RELEASE 3 #define __ATOMIC_SEQ_CST 5 #define __BIGGEST_ALIGNMENT__ 16 #define __BLOCKS__ 1 #define __BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__ #define __CHAR16_TYPE__ unsigned short #define __CHAR32_TYPE__ unsigned int #define __CHAR_BIT__ 8 #define __CONSTANT_CFSTRINGS__ 1 #define __DBL_DECIMAL_DIG__ 17 #define __DBL_DENORM_MIN__ 4.9406564584124654e-324 #define __DBL_DIG__ 15 #define __DBL_EPSILON__ 2.2204460492503131e-16 #define __DBL_HAS_DENORM__ 1 #define __DBL_HAS_INFINITY__ 1 #define __DBL_HAS_QUIET_NAN__ 1 #define __DBL_MANT_DIG__ 53 #define __DBL_MAX_10_EXP__ 308 #define __DBL_MAX_EXP__ 1024 #define __DBL_MAX__ 1.7976931348623157e+308 #define __DBL_MIN_10_EXP__ (-307) #define __DBL_MIN_EXP__ (-1021) #define __DBL_MIN__ 2.2250738585072014e-308 #define __DECIMAL_DIG__ __LDBL_DECIMAL_DIG__ #define __DEPRECATED 1 #define __DYNAMIC__ 1 #define __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ 101100 #define __EXCEPTIONS 1 #define __FINITE_MATH_ONLY__ 0 #define __FLT_DECIMAL_DIG__ 9 #define __FLT_DENORM_MIN__ 1.40129846e-45F #define __FLT_DIG__ 6 #define __FLT_EPSILON__ 1.19209290e-7F #define __FLT_EVAL_METHOD__ 0 #define __FLT_HAS_DENORM__ 1 #define __FLT_HAS_INFINITY__ 1 #define __FLT_HAS_QUIET_NAN__ 1 #define __FLT_MANT_DIG__ 24 #define __FLT_MAX_10_EXP__ 38 #define __FLT_MAX_EXP__ 128 #define __FLT_MAX__ 3.40282347e+38F #define __FLT_MIN_10_EXP__ (-37) #define __FLT_MIN_EXP__ (-125) #define __FLT_MIN__ 1.17549435e-38F #define __FLT_RADIX__ 2 #define __FXSR__ 1 #define __GCC_ATOMIC_BOOL_LOCK_FREE 2 #define __GCC_ATOMIC_CHAR16_T_LOCK_FREE 2 #define __GCC_ATOMIC_CHAR32_T_LOCK_FREE 2 #define __GCC_ATOMIC_CHAR_LOCK_FREE 2 #define __GCC_ATOMIC_INT_LOCK_FREE 2 #define __GCC_ATOMIC_LLONG_LOCK_FREE 2 #define __GCC_ATOMIC_LONG_LOCK_FREE 2 #define __GCC_ATOMIC_POINTER_LOCK_FREE 2 #define __GCC_ATOMIC_SHORT_LOCK_FREE 2 #define __GCC_ATOMIC_TEST_AND_SET_TRUEVAL 1 #define __GCC_ATOMIC_WCHAR_T_LOCK_FREE 2 #define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 1 #define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_16 1 #define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_2 1 #define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 1 #define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8 1 #define __GNUC_GNU_INLINE__ 1 #define __GNUC_MINOR__ 2 #define __GNUC_PATCHLEVEL__ 1 #define __GNUC__ 4 #define __GNUG__ 4 #define __GXX_ABI_VERSION 1002 #define __GXX_RTTI 1 #define __GXX_WEAK__ 1 #define __INT16_C_SUFFIX__ #define __INT16_FMTd__ "hd" #define __INT16_FMTi__ "hi" #define __INT16_MAX__ 32767 #define __INT16_TYPE__ short #define __INT32_C_SUFFIX__ #define __INT32_FMTd__ "d" #define __INT32_FMTi__ "i" #define __INT32_MAX__ 2147483647 #define __INT32_TYPE__ int #define __INT64_C_SUFFIX__ LL #define __INT64_FMTd__ "lld" #define __INT64_FMTi__ "lli" #define __INT64_MAX__ 9223372036854775807LL #define __INT64_TYPE__ long long int #define __INT8_C_SUFFIX__ #define __INT8_FMTd__ "hhd" #define __INT8_FMTi__ "hhi" #define __INT8_MAX__ 127 #define __INT8_TYPE__ signed char #define __INTMAX_C_SUFFIX__ L #define __INTMAX_FMTd__ "ld" #define __INTMAX_FMTi__ "li" #define __INTMAX_MAX__ 9223372036854775807L #define __INTMAX_TYPE__ long int #define __INTMAX_WIDTH__ 64 #define __INTPTR_FMTd__ "ld" #define __INTPTR_FMTi__ "li" #define __INTPTR_MAX__ 9223372036854775807L #define __INTPTR_TYPE__ long int #define __INTPTR_WIDTH__ 64 #define __INT_FAST16_FMTd__ "hd" #define __INT_FAST16_FMTi__ "hi" #define __INT_FAST16_MAX__ 32767 #define __INT_FAST16_TYPE__ short #define __INT_FAST32_FMTd__ "d" #define __INT_FAST32_FMTi__ "i" #define __INT_FAST32_MAX__ 2147483647 #define __INT_FAST32_TYPE__ int #define __INT_FAST64_FMTd__ "ld" #define __INT_FAST64_FMTi__ "li" #define __INT_FAST64_MAX__ 9223372036854775807L #define __INT_FAST64_TYPE__ long int #define __INT_FAST8_FMTd__ "hhd" #define __INT_FAST8_FMTi__ "hhi" #define __INT_FAST8_MAX__ 127 #define __INT_FAST8_TYPE__ signed char #define __INT_LEAST16_FMTd__ "hd" #define __INT_LEAST16_FMTi__ "hi" #define __INT_LEAST16_MAX__ 32767 #define __INT_LEAST16_TYPE__ short #define __INT_LEAST32_FMTd__ "d" #define __INT_LEAST32_FMTi__ "i" #define __INT_LEAST32_MAX__ 2147483647 #define __INT_LEAST32_TYPE__ int #define __INT_LEAST64_FMTd__ "ld" #define __INT_LEAST64_FMTi__ "li" #define __INT_LEAST64_MAX__ 9223372036854775807L #define __INT_LEAST64_TYPE__ long int #define __INT_LEAST8_FMTd__ "hhd" #define __INT_LEAST8_FMTi__ "hhi" #define __INT_LEAST8_MAX__ 127 #define __INT_LEAST8_TYPE__ signed char #define __INT_MAX__ 2147483647 #define __LDBL_DECIMAL_DIG__ 21 #define
[Issue 16536] DMD master does not build on OS X 10.11.6/Xcode 7.3.1
https://issues.dlang.org/show_bug.cgi?id=16536 Walter Brightchanged: What|Removed |Added CC||bugzi...@digitalmars.com --- Comment #1 from Walter Bright --- Note the following from cdef.h: #if defined(__UINT64_TYPE__) typedef __INT64_TYPE__ targ_llong; typedef __UINT64_TYPE__targ_ullong; #elif defined(__UINTMAX_TYPE__) typedef __INTMAX_TYPE__targ_llong; typedef __UINTMAX_TYPE__ targ_ullong; #else typedef long long targ_llong; typedef unsigned long long targ_ullong; #endif Which of these is the C++ compiler on your machine doing? Is there another macro it should be doing? Getting this right is necessary for the name mangling to match what D generates for 'long' and 'ulong'. The way to determine the pertinent macro is to have your C++ compiler dump all its predefined macros, once for -m32 and once for -m64. Diff the two, and find the relevant macro. --