October 07, 2016
https://issues.dlang.org/show_bug.cgi?id=16536

--- Comment #10 from David Nadlinger <code@klickverbot.at> ---
(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

--
October 07, 2016
https://issues.dlang.org/show_bug.cgi?id=16536

--- Comment #11 from Steven Schveighoffer <schveiguy@yahoo.com> ---
(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.

--
October 07, 2016
https://issues.dlang.org/show_bug.cgi?id=16536

--- Comment #12 from Jacob Carlborg <doob@me.com> ---
I have the same error with Clang 7.0.2 as well. I also have the same output.

--
October 07, 2016
https://issues.dlang.org/show_bug.cgi?id=16536

--- Comment #13 from Martin Nowak <code@dawg.eu> ---
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.

--
October 07, 2016
https://issues.dlang.org/show_bug.cgi?id=16536

--- Comment #14 from Martin Nowak <code@dawg.eu> ---
(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.

--
October 07, 2016
https://issues.dlang.org/show_bug.cgi?id=16536

Martin Nowak <code@dawg.eu> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |pull

--- Comment #15 from Martin Nowak <code@dawg.eu> ---
https://github.com/dlang/dmd/pull/6180

--
October 07, 2016
https://issues.dlang.org/show_bug.cgi?id=16536

--- Comment #16 from github-bugzilla@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

--
October 07, 2016
https://issues.dlang.org/show_bug.cgi?id=16536

github-bugzilla@puremagic.com changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
         Resolution|---                         |FIXED

--
October 08, 2016
https://issues.dlang.org/show_bug.cgi?id=16536

--- Comment #17 from Steven Schveighoffer <schveiguy@yahoo.com> ---
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 :)

--
October 09, 2016
https://issues.dlang.org/show_bug.cgi?id=16536

--- Comment #18 from github-bugzilla@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

--