Bug 16536 – DMD master does not build on OS X 10.11.6/Xcode 7.3.1

Status
RESOLVED
Resolution
FIXED
Severity
regression
Priority
P1
Component
dmd
Product
D
Version
D2
Platform
x86
OS
Mac OS X
Creation time
2016-09-24T21:55:00Z
Last change time
2016-11-04T09:05:25Z
Keywords
pull
Assigned to
nobody
Creator
code

Comments

Comment #0 by code — 2016-09-24T21:55:54Z
--- $ cd dmd $ git show commit d8be50edd4106ca498ed09a9b3a445240de5cf47 […] $ make -f posix.mak […] Undefined symbols for architecture x86_64: "symboldata(unsigned long long, unsigned int)", referenced from: el_ptr(Symbol*) in backend.a(el.o) el_convstring(elem*) in backend.a(el.o) out_readonly_sym(unsigned int, void*, int) in backend.a(out.o) Obj::sym_cdata(unsigned int, char*, int) in backend.a(machobj.o) "_align(unsigned long long, unsigned long long)", referenced from: codgen() in backend.a(cgcod.o) stackoffsets(int) in backend.a(cgcod.o) outjmptab(block*) in backend.a(cod3.o) outswitab(block*) in backend.a(cod3.o) type_paramsize(TYPE*) in backend.a(type.o) alignOffset(int, unsigned long long) in backend.a(out.o) cdfunc(elem*, unsigned int*) in backend.a(cod1.o) ... --- This is on linking the DMD executable. Xcode 7.3.1: --- $ clang --version Apple LLVM version 7.3.0 (clang-703.0.31) Target: x86_64-apple-darwin15.6.0 Thread model: posix InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin --- Host DMD from Homebrew: --- $ dmd --version DMD64 D Compiler v2.071.1 --- This seems to be fallout from translating msc.c to D.
Comment #1 by bugzilla — 2016-09-24T22:50:38Z
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.
Comment #2 by code — 2016-09-24T22:56:30Z
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 __LDBL_DENORM_MIN__ 3.64519953188247460253e-4951L #define __LDBL_DIG__ 18 #define __LDBL_EPSILON__ 1.08420217248550443401e-19L #define __LDBL_HAS_DENORM__ 1 #define __LDBL_HAS_INFINITY__ 1 #define __LDBL_HAS_QUIET_NAN__ 1 #define __LDBL_MANT_DIG__ 64 #define __LDBL_MAX_10_EXP__ 4932 #define __LDBL_MAX_EXP__ 16384 #define __LDBL_MAX__ 1.18973149535723176502e+4932L #define __LDBL_MIN_10_EXP__ (-4931) #define __LDBL_MIN_EXP__ (-16381) #define __LDBL_MIN__ 3.36210314311209350626e-4932L #define __LITTLE_ENDIAN__ 1 #define __LONG_LONG_MAX__ 9223372036854775807LL #define __LONG_MAX__ 9223372036854775807L #define __LP64__ 1 #define __MACH__ 1 #define __MMX__ 1 #define __NO_INLINE__ 1 #define __NO_MATH_INLINES 1 #define __ORDER_BIG_ENDIAN__ 4321 #define __ORDER_LITTLE_ENDIAN__ 1234 #define __ORDER_PDP_ENDIAN__ 3412 #define __PIC__ 2 #define __POINTER_WIDTH__ 64 #define __PRAGMA_REDEFINE_EXTNAME 1 #define __PTRDIFF_FMTd__ "ld" #define __PTRDIFF_FMTi__ "li" #define __PTRDIFF_MAX__ 9223372036854775807L #define __PTRDIFF_TYPE__ long int #define __PTRDIFF_WIDTH__ 64 #define __REGISTER_PREFIX__ #define __SCHAR_MAX__ 127 #define __SHRT_MAX__ 32767 #define __SIG_ATOMIC_MAX__ 2147483647 #define __SIG_ATOMIC_WIDTH__ 32 #define __SIZEOF_DOUBLE__ 8 #define __SIZEOF_FLOAT__ 4 #define __SIZEOF_INT128__ 16 #define __SIZEOF_INT__ 4 #define __SIZEOF_LONG_DOUBLE__ 16 #define __SIZEOF_LONG_LONG__ 8 #define __SIZEOF_LONG__ 8 #define __SIZEOF_POINTER__ 8 #define __SIZEOF_PTRDIFF_T__ 8 #define __SIZEOF_SHORT__ 2 #define __SIZEOF_SIZE_T__ 8 #define __SIZEOF_WCHAR_T__ 4 #define __SIZEOF_WINT_T__ 4 #define __SIZE_FMTX__ "lX" #define __SIZE_FMTo__ "lo" #define __SIZE_FMTu__ "lu" #define __SIZE_FMTx__ "lx" #define __SIZE_MAX__ 18446744073709551615UL #define __SIZE_TYPE__ long unsigned int #define __SIZE_WIDTH__ 64 #define __SSE2_MATH__ 1 #define __SSE2__ 1 #define __SSE3__ 1 #define __SSE_MATH__ 1 #define __SSE__ 1 #define __SSP__ 1 #define __SSSE3__ 1 #define __STDC_HOSTED__ 1 #define __STDC_UTF_16__ 1 #define __STDC_UTF_32__ 1 #define __STDC__ 1 #define __UINT16_C_SUFFIX__ #define __UINT16_FMTX__ "hX" #define __UINT16_FMTo__ "ho" #define __UINT16_FMTu__ "hu" #define __UINT16_FMTx__ "hx" #define __UINT16_MAX__ 65535 #define __UINT16_TYPE__ unsigned short #define __UINT32_C_SUFFIX__ U #define __UINT32_FMTX__ "X" #define __UINT32_FMTo__ "o" #define __UINT32_FMTu__ "u" #define __UINT32_FMTx__ "x" #define __UINT32_MAX__ 4294967295U #define __UINT32_TYPE__ unsigned int #define __UINT64_C_SUFFIX__ ULL #define __UINT64_FMTX__ "llX" #define __UINT64_FMTo__ "llo" #define __UINT64_FMTu__ "llu" #define __UINT64_FMTx__ "llx" #define __UINT64_MAX__ 18446744073709551615ULL #define __UINT64_TYPE__ long long unsigned int #define __UINT8_C_SUFFIX__ #define __UINT8_FMTX__ "hhX" #define __UINT8_FMTo__ "hho" #define __UINT8_FMTu__ "hhu" #define __UINT8_FMTx__ "hhx" #define __UINT8_MAX__ 255 #define __UINT8_TYPE__ unsigned char #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 #define __UINTPTR_FMTX__ "lX" #define __UINTPTR_FMTo__ "lo" #define __UINTPTR_FMTu__ "lu" #define __UINTPTR_FMTx__ "lx" #define __UINTPTR_MAX__ 18446744073709551615UL #define __UINTPTR_TYPE__ long unsigned int #define __UINTPTR_WIDTH__ 64 #define __UINT_FAST16_FMTX__ "hX" #define __UINT_FAST16_FMTo__ "ho" #define __UINT_FAST16_FMTu__ "hu" #define __UINT_FAST16_FMTx__ "hx" #define __UINT_FAST16_MAX__ 65535 #define __UINT_FAST16_TYPE__ unsigned short #define __UINT_FAST32_FMTX__ "X" #define __UINT_FAST32_FMTo__ "o" #define __UINT_FAST32_FMTu__ "u" #define __UINT_FAST32_FMTx__ "x" #define __UINT_FAST32_MAX__ 4294967295U #define __UINT_FAST32_TYPE__ unsigned int #define __UINT_FAST64_FMTX__ "lX" #define __UINT_FAST64_FMTo__ "lo" #define __UINT_FAST64_FMTu__ "lu" #define __UINT_FAST64_FMTx__ "lx" #define __UINT_FAST64_MAX__ 18446744073709551615UL #define __UINT_FAST64_TYPE__ long unsigned int #define __UINT_FAST8_FMTX__ "hhX" #define __UINT_FAST8_FMTo__ "hho" #define __UINT_FAST8_FMTu__ "hhu" #define __UINT_FAST8_FMTx__ "hhx" #define __UINT_FAST8_MAX__ 255 #define __UINT_FAST8_TYPE__ unsigned char #define __UINT_LEAST16_FMTX__ "hX" #define __UINT_LEAST16_FMTo__ "ho" #define __UINT_LEAST16_FMTu__ "hu" #define __UINT_LEAST16_FMTx__ "hx" #define __UINT_LEAST16_MAX__ 65535 #define __UINT_LEAST16_TYPE__ unsigned short #define __UINT_LEAST32_FMTX__ "X" #define __UINT_LEAST32_FMTo__ "o" #define __UINT_LEAST32_FMTu__ "u" #define __UINT_LEAST32_FMTx__ "x" #define __UINT_LEAST32_MAX__ 4294967295U #define __UINT_LEAST32_TYPE__ unsigned int #define __UINT_LEAST64_FMTX__ "lX" #define __UINT_LEAST64_FMTo__ "lo" #define __UINT_LEAST64_FMTu__ "lu" #define __UINT_LEAST64_FMTx__ "lx" #define __UINT_LEAST64_MAX__ 18446744073709551615UL #define __UINT_LEAST64_TYPE__ long unsigned int #define __UINT_LEAST8_FMTX__ "hhX" #define __UINT_LEAST8_FMTo__ "hho" #define __UINT_LEAST8_FMTu__ "hhu" #define __UINT_LEAST8_FMTx__ "hhx" #define __UINT_LEAST8_MAX__ 255 #define __UINT_LEAST8_TYPE__ unsigned char #define __USER_LABEL_PREFIX__ _ #define __VERSION__ "4.2.1 Compatible Apple LLVM 7.3.0 (clang-703.0.31)" #define __WCHAR_MAX__ 2147483647 #define __WCHAR_TYPE__ int #define __WCHAR_WIDTH__ 32 #define __WINT_TYPE__ int #define __WINT_WIDTH__ 32 #define __amd64 1 #define __amd64__ 1 #define __apple_build_version__ 7030031 #define __block __attribute__((__blocks__(byref))) #define __clang__ 1 #define __clang_major__ 7 #define __clang_minor__ 3 #define __clang_patchlevel__ 0 #define __clang_version__ "7.3.0 (clang-703.0.31)" #define __core2 1 #define __core2__ 1 #define __cplusplus 199711L #define __cpp_exceptions 199711 #define __cpp_rtti 199711 #define __llvm__ 1 #define __nonnull _Nonnull #define __null_unspecified _Null_unspecified #define __nullable _Nullable #define __pic__ 2 #define __private_extern__ extern #define __strong #define __tune_core2__ 1 #define __unsafe_unretained #define __weak __attribute__((objc_gc(weak))) #define __x86_64 1 #define __x86_64__ 1 ---
Comment #3 by doob — 2016-09-26T12:50:27Z
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.
Comment #4 by doob — 2016-09-26T13:20:07Z
Should it be using d_size_t instead of targ_ullong?
Comment #5 by john.loughran.colvin — 2016-10-03T23:03:38Z
This is preventing testing 2.072.0-b1 on os x.
Comment #6 by doob — 2016-10-04T06:15:33Z
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.
Comment #7 by code — 2016-10-04T21:20:14Z
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.
Comment #8 by code — 2016-10-05T18:13:55Z
*** Issue 16596 has been marked as a duplicate of this issue. ***
Comment #9 by code — 2016-10-07T16:07:11Z
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.
Comment #10 by code — 2016-10-07T16:10:42Z
(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
Comment #11 by schveiguy — 2016-10-07T16:12:55Z
(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.
Comment #12 by doob — 2016-10-07T17:36:01Z
I have the same error with Clang 7.0.2 as well. I also have the same output.
Comment #13 by code — 2016-10-07T20:21:42Z
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.
Comment #14 by code — 2016-10-07T20:39:33Z
(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 <stdint.h> 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.
Comment #15 by code — 2016-10-07T21:06:11Z
Comment #16 by github-bugzilla — 2016-10-07T22:12:26Z
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
Comment #17 by schveiguy — 2016-10-08T16:56:10Z
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 :)
Comment #18 by github-bugzilla — 2016-10-09T10:54:32Z
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
Comment #19 by github-bugzilla — 2016-10-09T18:50:46Z
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
Comment #20 by github-bugzilla — 2016-11-04T09:05:25Z
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