diff --git a/src/dmd/backend/cdef.h b/src/dmd/backend/cdef.h index 4bc997b68f32..66233ba7a77a 100644 --- a/src/dmd/backend/cdef.h +++ b/src/dmd/backend/cdef.h @@ -235,11 +235,15 @@ char *strupr(char *); #include // for size_t -#if __APPLE__ && __i386__ +#if __APPLE__ /* size_t is 'unsigned long', which makes it mangle differently * than D's 'uint' */ +#if __i386__ typedef unsigned d_size_t; +#else + typedef unsigned long long d_size_t; +#endif #else typedef size_t d_size_t; #endif diff --git a/src/dmd/backend/dt.h b/src/dmd/backend/dt.h index 6dd6ca707056..e054c2fcb120 100644 --- a/src/dmd/backend/dt.h +++ b/src/dmd/backend/dt.h @@ -5,11 +5,15 @@ #include // for size_t -#if __APPLE__ && __i386__ +#if __APPLE__ /* size_t is 'unsigned long', which makes it mangle differently * than D's 'uint' */ +#if __i386__ typedef unsigned d_size_t; +#else + typedef unsigned long long d_size_t; +#endif #else typedef size_t d_size_t; #endif diff --git a/src/dmd/backend/outbuf.h b/src/dmd/backend/outbuf.h index 029b8f7119ff..caa39749e43b 100644 --- a/src/dmd/backend/outbuf.h +++ b/src/dmd/backend/outbuf.h @@ -15,11 +15,15 @@ #include // for size_t -#if __APPLE__ && __i386__ +#if __APPLE__ /* size_t is 'unsigned long', which makes it mangle differently * than D's 'uint' */ +#if __i386__ typedef unsigned d_size_t; +#else + typedef unsigned long long d_size_t; +#endif #else typedef size_t d_size_t; #endif diff --git a/src/dmd/identifier.d b/src/dmd/identifier.d index a6702cddada9..8b5438116b0d 100644 --- a/src/dmd/identifier.d +++ b/src/dmd/identifier.d @@ -23,6 +23,17 @@ import dmd.root.stringtable; import dmd.tokens; import dmd.utf; +version (OSX) +{ + // size_t is unsigned long on OSX, which results in name mangling issues + version (D_LP64) + alias d_size_t = ulong; + else + alias d_size_t = uint; +} +else + alias d_size_t = size_t; + /*********************************************************** */ extern (C++) final class Identifier : RootObject @@ -146,7 +157,7 @@ nothrow: return idPool(s.ptr, s.length); } - static Identifier idPool(const(char)* s, size_t len) + static Identifier idPool(const(char)* s, d_size_t len) { StringValue* sv = stringtable.update(s, len); Identifier id = cast(Identifier)sv.ptrvalue; diff --git a/src/dmd/root/rmem.h b/src/dmd/root/rmem.h index ca8452379eb5..bf05583d5675 100644 --- a/src/dmd/root/rmem.h +++ b/src/dmd/root/rmem.h @@ -12,11 +12,15 @@ #include // for size_t -#if __APPLE__ && __i386__ +#if __APPLE__ /* size_t is 'unsigned long', which makes it mangle differently * than D's 'uint' */ +#if __i386__ typedef unsigned d_size_t; +#else + typedef unsigned long long d_size_t; +#endif #else typedef size_t d_size_t; #endif diff --git a/src/dmd/tk/mem.h b/src/dmd/tk/mem.h index 7a411df6684e..962e5ffcd54e 100644 --- a/src/dmd/tk/mem.h +++ b/src/dmd/tk/mem.h @@ -12,11 +12,15 @@ #include // for size_t -#if __APPLE__ && __i386__ +#if __APPLE__ /* size_t is 'unsigned long', which makes it mangle differently * than D's 'uint' */ +#if __i386__ typedef unsigned d_size_t; +#else + typedef unsigned long long d_size_t; +#endif #else typedef size_t d_size_t; #endif