diff options
| author | Iain Buclaw <ibuclaw@gdcproject.org> | 2025-03-14 01:36:45 +0100 |
|---|---|---|
| committer | Iain Buclaw <ibuclaw@gdcproject.org> | 2025-03-16 20:49:55 +0100 |
| commit | 26c4ea2ebcdcd0aa26350d04dc4cd38348148bd9 (patch) | |
| tree | abe80e8d65acfee1b474c17cdbbb6c04894cac96 /libphobos/libdruntime | |
| parent | 427972b2f1335c7430785ad4afd15386a17156ec (diff) | |
d: Merge upstream dmd, druntime 53a1cc8d13
D front-end changes:
- Typesafe variadic class parameters have been deprecated.
D runtime changes:
- Added `entry' field to TypeInfo_AssociativeArray.
gcc/d/ChangeLog:
* dmd/MERGE: Merge upstream dmd 53a1cc8d13.
* d-tree.h (create_typeinfo): Change second parameter to Scope *.
(speculative_type_p): Remove prototype.
* d-frontend.cc (getTypeInfoType): Adjust.
* decl.cc: Include dmd/typinf.h.
(DeclVisitor::visit (TypeInfoDeclaration *)): Update for new front-end
interface.
* typeinfo.cc (create_typeinfo): Likewise.
(class SpeculativeTypeVisitor): Remove class.
(speculative_type_p): Remove function.
libphobos/ChangeLog:
* libdruntime/MERGE: Merge upstream druntime 53a1cc8d13.
gcc/testsuite/ChangeLog:
* gdc.dg/pr100967.d: Adjust error message.
Diffstat (limited to 'libphobos/libdruntime')
| -rw-r--r-- | libphobos/libdruntime/MERGE | 2 | ||||
| -rw-r--r-- | libphobos/libdruntime/core/internal/array/appending.d | 4 | ||||
| -rw-r--r-- | libphobos/libdruntime/core/internal/array/concatenation.d | 4 | ||||
| -rw-r--r-- | libphobos/libdruntime/core/internal/array/construction.d | 4 | ||||
| -rw-r--r-- | libphobos/libdruntime/core/internal/array/utils.d | 14 | ||||
| -rw-r--r-- | libphobos/libdruntime/core/internal/newaa.d | 13 | ||||
| -rw-r--r-- | libphobos/libdruntime/core/lifetime.d | 4 | ||||
| -rw-r--r-- | libphobos/libdruntime/core/stdc/config.d | 5 | ||||
| -rw-r--r-- | libphobos/libdruntime/core/stdc/math.d | 499 | ||||
| -rw-r--r-- | libphobos/libdruntime/core/stdc/stdio.d | 188 | ||||
| -rw-r--r-- | libphobos/libdruntime/core/stdc/stdlib.d | 12 | ||||
| -rw-r--r-- | libphobos/libdruntime/core/sys/windows/sql.d | 6 | ||||
| -rw-r--r-- | libphobos/libdruntime/core/sys/windows/sqlext.d | 1 | ||||
| -rw-r--r-- | libphobos/libdruntime/core/sys/windows/sqltypes.d | 4 | ||||
| -rw-r--r-- | libphobos/libdruntime/core/sys/windows/sqlucode.d | 1 | ||||
| -rw-r--r-- | libphobos/libdruntime/object.d | 8 | ||||
| -rw-r--r-- | libphobos/libdruntime/rt/aaA.d | 146 | ||||
| -rw-r--r-- | libphobos/libdruntime/rt/lifetime.d | 13 |
18 files changed, 564 insertions, 364 deletions
diff --git a/libphobos/libdruntime/MERGE b/libphobos/libdruntime/MERGE index 59d5a184810..66cfdd6ad4a 100644 --- a/libphobos/libdruntime/MERGE +++ b/libphobos/libdruntime/MERGE @@ -1,4 +1,4 @@ -ffbad272b649b7ae3e88cfdc85688bfef3168994 +53a1cc8d13e8db2cb1642219320a8dfc1b0cc6c5 The first line of this file holds the git revision number of the last merge done from the dlang/dmd repository. diff --git a/libphobos/libdruntime/core/internal/array/appending.d b/libphobos/libdruntime/core/internal/array/appending.d index ba34727a305..1b2b78ea570 100644 --- a/libphobos/libdruntime/core/internal/array/appending.d +++ b/libphobos/libdruntime/core/internal/array/appending.d @@ -52,7 +52,7 @@ version (D_ProfileGC) /** * TraceGC wrapper around $(REF _d_arrayappendT, core,internal,array,appending). */ - ref Tarr _d_arrayappendcTXTrace(Tarr : T[], T)(string file, int line, string funcname, return ref scope Tarr px, size_t n) @trusted + ref Tarr _d_arrayappendcTXTrace(Tarr : T[], T)(return ref scope Tarr px, size_t n, string file = __FILE__, int line = __LINE__, string funcname = __FUNCTION__) @trusted { version (D_TypeInfo) { @@ -115,7 +115,7 @@ version (D_ProfileGC) /** * TraceGC wrapper around $(REF _d_arrayappendT, core,internal,array,appending). */ - ref Tarr _d_arrayappendTTrace(Tarr : T[], T)(string file, int line, string funcname, return ref scope Tarr x, scope Tarr y) @trusted + ref Tarr _d_arrayappendTTrace(Tarr : T[], T)(return ref scope Tarr x, scope Tarr y, string file = __FILE__, int line = __LINE__, string funcname = __FUNCTION__) @trusted { version (D_TypeInfo) { diff --git a/libphobos/libdruntime/core/internal/array/concatenation.d b/libphobos/libdruntime/core/internal/array/concatenation.d index 3063c4c0ea0..13ec5fad40f 100644 --- a/libphobos/libdruntime/core/internal/array/concatenation.d +++ b/libphobos/libdruntime/core/internal/array/concatenation.d @@ -48,7 +48,7 @@ Tret _d_arraycatnTX(Tret, Tarr...)(auto ref Tarr froms) @trusted { // TODO: forward file, line, name from _d_arraycatnTXTrace _d_arraysetlengthTImpl!(typeof(res))._d_arraysetlengthTTrace( - __FILE__, __LINE__, "_d_arraycatnTX", res, totalLen); + res, totalLen, __FILE__, __LINE__, __FUNCTION__); } else { @@ -178,7 +178,7 @@ version (D_ProfileGC) /** * TraceGC wrapper around $(REF _d_arraycatnTX, core,internal,array,concatenation). */ - Tret _d_arraycatnTXTrace(Tret, Tarr...)(string file, int line, string funcname, scope auto ref Tarr froms) @trusted + Tret _d_arraycatnTXTrace(Tret, Tarr...)(scope auto ref Tarr froms, string file = __FILE__, int line = __LINE__, string funcname = __FUNCTION__) @trusted { version (D_TypeInfo) { diff --git a/libphobos/libdruntime/core/internal/array/construction.d b/libphobos/libdruntime/core/internal/array/construction.d index 45a1ce5629d..40e5a61bbde 100644 --- a/libphobos/libdruntime/core/internal/array/construction.d +++ b/libphobos/libdruntime/core/internal/array/construction.d @@ -470,7 +470,7 @@ version (D_ProfileGC) /** * TraceGC wrapper around $(REF _d_newitemT, core,lifetime). */ - T[] _d_newarrayTTrace(T)(string file, int line, string funcname, size_t length, bool isShared) @trusted + T[] _d_newarrayTTrace(T)(size_t length, bool isShared, string file = __FILE__, int line = __LINE__, string funcname = __FUNCTION__) @trusted { version (D_TypeInfo) { @@ -602,7 +602,7 @@ version (D_ProfileGC) /** * TraceGC wrapper around $(REF _d_newarraymT, core,internal,array,construction). */ - Tarr _d_newarraymTXTrace(Tarr : U[], T, U)(string file, int line, string funcname, size_t[] dims, bool isShared=false) @trusted + Tarr _d_newarraymTXTrace(Tarr : U[], T, U)(size_t[] dims, bool isShared=false, string file = __FILE__, int line = __LINE__, string funcname = __FUNCTION__) @trusted { version (D_TypeInfo) { diff --git a/libphobos/libdruntime/core/internal/array/utils.d b/libphobos/libdruntime/core/internal/array/utils.d index 2cda571ba71..deaae3f95da 100644 --- a/libphobos/libdruntime/core/internal/array/utils.d +++ b/libphobos/libdruntime/core/internal/array/utils.d @@ -53,18 +53,6 @@ version (D_ProfileGC) string name = } ~ "`" ~ Type ~ "`;" ~ q{ // FIXME: use rt.tracegc.accumulator when it is accessable in the future. - version (tracegc) - } ~ "{\n" ~ q{ - import core.stdc.stdio : printf; - - printf("%sTrace file = '%.*s' line = %d function = '%.*s' type = %.*s\n", - } ~ "\"" ~ Hook ~ "\".ptr," ~ q{ - file.length, file.ptr, - line, - funcname.length, funcname.ptr, - name.length, name.ptr - ); - } ~ "}\n" ~ q{ ulong currentlyAllocated = gcStatsPure().allocatedInCurrentThread; scope(exit) @@ -99,7 +87,7 @@ version (D_ProfileGC) * purity, and throwabilty checks. To prevent breaking existing code, this function template * is temporarily declared `@trusted pure` until the implementation can be brought up to modern D expectations. */ - auto _d_HookTraceImpl(T, alias Hook, string errorMessage)(string file, int line, string funcname, Parameters!Hook parameters) @trusted pure + auto _d_HookTraceImpl(T, alias Hook, string errorMessage)(Parameters!Hook parameters, string file = __FILE__, int line = __LINE__, string funcname = __FUNCTION__) @trusted pure { version (D_TypeInfo) { diff --git a/libphobos/libdruntime/core/internal/newaa.d b/libphobos/libdruntime/core/internal/newaa.d index 7c858f33522..47283f28030 100644 --- a/libphobos/libdruntime/core/internal/newaa.d +++ b/libphobos/libdruntime/core/internal/newaa.d @@ -44,7 +44,7 @@ struct Impl Bucket[] buckets; uint used; uint deleted; - TypeInfo_Struct entryTI; + const(TypeInfo) entryTI; uint firstUsed; immutable uint keysz; immutable uint valsz; @@ -75,15 +75,6 @@ private size_t mix(size_t h) @safe pure nothrow @nogc return h; } -struct Entry(K, V) -{ - // can make this const, because we aren't really going to use it aside from - // construction. - const K key; - V value; -} - - // create a binary-compatible AA structure that can be used directly as an // associative array. // NOTE: this must only be called during CTFE @@ -92,7 +83,7 @@ AAShell makeAA(K, V)(V[K] src) @trusted assert(__ctfe, "makeAA Must only be called at compile time"); immutable srclen = src.length; assert(srclen <= uint.max); - alias E = Entry!(K, V); + alias E = TypeInfo_AssociativeArray.Entry!(K, V); if (srclen == 0) return AAShell.init; // first, determine the size that would be used if we grew the bucket list diff --git a/libphobos/libdruntime/core/lifetime.d b/libphobos/libdruntime/core/lifetime.d index a088bf6ca2d..49512ab14b4 100644 --- a/libphobos/libdruntime/core/lifetime.d +++ b/libphobos/libdruntime/core/lifetime.d @@ -2788,7 +2788,7 @@ if (is(T == class)) /** * TraceGC wrapper around $(REF _d_newclassT, core,lifetime). */ -T _d_newclassTTrace(T)(string file, int line, string funcname) @trusted +T _d_newclassTTrace(T)(string file = __FILE__, int line = __LINE__, string funcname = __FUNCTION__) @trusted { version (D_TypeInfo) { @@ -2985,7 +2985,7 @@ version (D_ProfileGC) /** * TraceGC wrapper around $(REF _d_newitemT, core,lifetime). */ - T* _d_newitemTTrace(T)(string file, int line, string funcname) @trusted + T* _d_newitemTTrace(T)(string file = __FILE__, int line = __LINE__, string funcname = __FUNCTION__) @trusted { version (D_TypeInfo) { diff --git a/libphobos/libdruntime/core/stdc/config.d b/libphobos/libdruntime/core/stdc/config.d index c95fe651407..34f78e03e4a 100644 --- a/libphobos/libdruntime/core/stdc/config.d +++ b/libphobos/libdruntime/core/stdc/config.d @@ -670,3 +670,8 @@ package(core) template muslRedirTime64Mangle(string name, string redirectedName) else enum muslRedirTime64Mangle = name; } + +version (PPC64) + enum PPCUseIEEE128 = real.mant_dig == 113; +else + enum PPCUseIEEE128 = false; diff --git a/libphobos/libdruntime/core/stdc/math.d b/libphobos/libdruntime/core/stdc/math.d index e54d5813995..1f384f9cbd4 100644 --- a/libphobos/libdruntime/core/stdc/math.d +++ b/libphobos/libdruntime/core/stdc/math.d @@ -4284,404 +4284,651 @@ else double acos(double x); /// float acosf(float x); - /// - real acosl(real x); /// double asin(double x); /// float asinf(float x); - /// - real asinl(real x); /// pure double atan(double x); /// pure float atanf(float x); - /// - pure real atanl(real x); /// double atan2(double y, double x); /// float atan2f(float y, float x); - /// - real atan2l(real y, real x); /// pure double cos(double x); /// pure float cosf(float x); - /// - pure real cosl(real x); /// pure double sin(double x); /// pure float sinf(float x); - /// - pure real sinl(real x); /// pure double tan(double x); /// pure float tanf(float x); - /// - pure real tanl(real x); /// double acosh(double x); /// float acoshf(float x); - /// - real acoshl(real x); /// pure double asinh(double x); /// pure float asinhf(float x); - /// - pure real asinhl(real x); /// double atanh(double x); /// float atanhf(float x); - /// - real atanhl(real x); /// double cosh(double x); /// float coshf(float x); - /// - real coshl(real x); /// double sinh(double x); /// float sinhf(float x); - /// - real sinhl(real x); /// pure double tanh(double x); /// pure float tanhf(float x); - /// - pure real tanhl(real x); /// double exp(double x); /// float expf(float x); - /// - real expl(real x); /// double exp2(double x); /// float exp2f(float x); - /// - real exp2l(real x); /// double expm1(double x); /// float expm1f(float x); - /// - real expm1l(real x); /// pure double frexp(double value, int* exp); /// pure float frexpf(float value, int* exp); - /// - pure real frexpl(real value, int* exp); /// int ilogb(double x); /// int ilogbf(float x); - /// - int ilogbl(real x); /// double ldexp(double x, int exp); /// float ldexpf(float x, int exp); - /// - real ldexpl(real x, int exp); /// double log(double x); /// float logf(float x); - /// - real logl(real x); /// double log10(double x); /// float log10f(float x); - /// - real log10l(real x); /// double log1p(double x); /// float log1pf(float x); - /// - real log1pl(real x); /// double log2(double x); /// float log2f(float x); - /// - real log2l(real x); /// double logb(double x); /// float logbf(float x); - /// - real logbl(real x); /// pure double modf(double value, double* iptr); /// pure float modff(float value, float* iptr); - /// - pure real modfl(real value, real *iptr); /// double scalbn(double x, int n); /// float scalbnf(float x, int n); - /// - real scalbnl(real x, int n); /// double scalbln(double x, c_long n); /// float scalblnf(float x, c_long n); - /// - real scalblnl(real x, c_long n); /// pure double cbrt(double x); /// pure float cbrtf(float x); - /// - pure real cbrtl(real x); /// pure double fabs(double x); - version (CRuntime_Microsoft) - { - } - else - { - /// - pure float fabsf(float x); - /// - pure real fabsl(real x); - } /// double hypot(double x, double y); /// float hypotf(float x, float y); - /// - real hypotl(real x, real y); /// double pow(double x, double y); /// float powf(float x, float y); - /// - real powl(real x, real y); /// double sqrt(double x); /// float sqrtf(float x); - /// - real sqrtl(real x); /// pure double erf(double x); /// pure float erff(float x); - /// - pure real erfl(real x); /// double erfc(double x); /// float erfcf(float x); - /// - real erfcl(real x); /// double lgamma(double x); /// float lgammaf(float x); - /// - real lgammal(real x); /// double tgamma(double x); /// float tgammaf(float x); - /// - real tgammal(real x); /// pure double ceil(double x); /// pure float ceilf(float x); - /// - pure real ceill(real x); /// pure double floor(double x); /// pure float floorf(float x); - /// - pure real floorl(real x); /// pure double nearbyint(double x); /// pure float nearbyintf(float x); - /// - pure real nearbyintl(real x); /// pure double rint(double x); /// pure float rintf(float x); - /// - pure real rintl(real x); /// c_long lrint(double x); /// c_long lrintf(float x); - /// - c_long lrintl(real x); /// long llrint(double x); /// long llrintf(float x); - /// - long llrintl(real x); /// pure double round(double x); /// pure float roundf(float x); - /// - pure real roundl(real x); /// c_long lround(double x); /// c_long lroundf(float x); - /// - c_long lroundl(real x); /// long llround(double x); /// long llroundf(float x); - /// - long llroundl(real x); /// pure double trunc(double x); /// pure float truncf(float x); - /// - pure real truncl(real x); /// double fmod(double x, double y); /// float fmodf(float x, float y); - /// - real fmodl(real x, real y); /// double remainder(double x, double y); /// float remainderf(float x, float y); - /// - real remainderl(real x, real y); /// double remquo(double x, double y, int* quo); /// float remquof(float x, float y, int* quo); - /// - real remquol(real x, real y, int* quo); /// pure double copysign(double x, double y); /// pure float copysignf(float x, float y); - /// - pure real copysignl(real x, real y); /// pure double nan(char* tagp); /// pure float nanf(char* tagp); - /// - pure real nanl(char* tagp); /// double nextafter(double x, double y); /// float nextafterf(float x, float y); /// - real nextafterl(real x, real y); - - /// - double nexttoward(double x, real y); - /// - float nexttowardf(float x, real y); - /// - real nexttowardl(real x, real y); /// double fdim(double x, double y); /// float fdimf(float x, float y); - /// - real fdiml(real x, real y); /// pure double fmax(double x, double y); /// pure float fmaxf(float x, float y); - /// - pure real fmaxl(real x, real y); + /// pure double fmin(double x, double y); /// pure float fminf(float x, float y); - /// - pure real fminl(real x, real y); + /// pure double fma(double x, double y, double z); /// pure float fmaf(float x, float y, float z); - /// - pure real fmal(real x, real y, real z); + + + static if (PPCUseIEEE128) { + /// + real __acosieee128(real x); + /// + alias acosl = __acosieee128; + /// + real __asinieee128(real x); + /// + alias asinl = __asinieee128; + /// + pure real __atanieee128(real x); + /// + alias atanl = __atanieee128; + /// + real __atan2ieee128(real y, real x); + /// + alias atan2l = __atan2ieee128; + /// + pure real __cosieee128(real x); + /// + alias cosl = __cosieee128; + /// + pure real __sinieee128(real x); + /// + alias sinl = __sinieee128; + /// + pure real __tanieee128(real x); + /// + alias tanl = __tanieee128; + /// + real __acoshieee128(real x); + /// + alias acoshl = __acoshieee128; + /// + pure real __asinhieee128(real x); + /// + alias asinhl = __asinhieee128; + /// + real __atanhieee128(real x); + /// + alias atanhl = __atanhieee128; + /// + real __coshieee128(real x); + /// + alias coshl = __coshieee128; + /// + real __sinhieee128(real x); + /// + alias sinhl = __sinhieee128; + /// + pure real __tanhieee128(real x); + /// + alias tanhl = __tanhieee128; + /// + real __expieee128(real x); + /// + alias expl = __expieee128; + /// + real __exp2ieee128(real x); + /// + alias exp2l = __exp2ieee128; + /// + real __expm1ieee128(real x); + /// + alias expm1l = __expm1ieee128; + /// + pure real __frexpieee128(real value, int* exp); + /// + alias frexpl = __frexpieee128; + /// + int __ilogbieee128(real x); + /// + alias ilogbl = __ilogbieee128; + /// + real __ldexpieee128(real x, int exp); + /// + alias ldexpl = __ldexpieee128; + /// + real __logieee128(real x); + /// + alias logl = __logieee128; + /// + real __log10ieee128(real x); + /// + alias log10l = __log10ieee128; + /// + real __log1pieee128(real x); + /// + alias log1pl = __log1pieee128; + /// + real __log2ieee128(real x); + /// + alias log2l = __log2ieee128; + /// + real __logbieee128(real x); + /// + alias logbl = __logbieee128; + /// + pure real __modfieee128(real value, real *iptr); + /// + alias modfl = __modfieee128; + /// + real __scalbnieee128(real x, int n); + /// + alias scalbnl = __scalbnieee128; + /// + real __scalblnieee128(real x, c_long n); + /// + alias scalblnl = __scalblnieee128; + /// + pure real __cbrtieee128(real x); + /// + alias cbrtl = __cbrtieee128; + /// + pure float fabsf(float x); + /// + pure real __fabsieee128(real x); + /// + alias fabsl = __fabsieee128; + /// + real __hypotieee128(real x, real y); + /// + alias hypotl = __hypotieee128; + /// + real __powieee128(real x, real y); + /// + alias powl = __powieee128; + /// + real __sqrtieee128(real x); + /// + alias sqrtl = __sqrtieee128; + /// + pure real __erfieee128(real x); + /// + alias erfl = __erfieee128; + /// + real __erfcieee128(real x); + /// + alias erfcl = __erfcieee128; + /// + real __lgammaieee128(real x); + /// + alias lgammal = __lgammaieee128; + /// + real __tgammaieee128(real x); + /// + alias tgammal = __tgammaieee128; + /// + pure real __ceilieee128(real x); + /// + alias ceill = __ceilieee128; + /// + pure real __floorieee128(real x); + /// + alias floorl = __floorieee128; + /// + pure real __nearbyintieee128(real x); + /// + alias nearbyintl = __nearbyintieee128; + /// + pure real __rintieee128(real x); + /// + alias rintl = __rintieee128; + /// + c_long __lrintieee128(real x); + /// + alias lrintl = __lrintieee128; + /// + long __llrintieee128(real x); + /// + alias llrintl = __llrintieee128; + /// + pure real __roundieee128(real x); + /// + alias roundl = __roundieee128; + /// + c_long __lroundieee128(real x); + /// + alias lroundl = __lroundieee128; + /// + long __llroundieee128(real x); + /// + alias llroundl = __llroundieee128; + /// + pure real __truncieee128(real x); + /// + alias truncl = __truncieee128; + /// + real __fmodieee128(real x, real y); + /// + alias fmodl = __fmodieee128; + /// + real __remainderieee128(real x, real y); + /// + alias remainderl = __remainderieee128; + /// + real __remquoieee128(real x, real y, int* quo); + /// + alias remquol = __remquoieee128; + /// + pure real __copysignieee128(real x, real y); + /// + alias copysignl = __copysignieee128; + /// + pure real __nanieee128(char* tagp); + /// + alias nanl = __nanieee128; + /// + real __nextafterieee128(real x, real y); + /// + alias nextafterl = __nextafterieee128; + /// + double __nexttoward_to_ieee128(double x, real y); + /// + alias nexttoward = __nexttoward_to_ieee128; + /// + float __nexttowardf_to_ieee128(float x, real y); + /// + alias nexttowardf = __nexttowardf_to_ieee128; + /// + real __nexttowardieee128(real x, real y); + /// + alias nexttowardl = __nexttowardieee128; + /// + real __fdimieee128(real x, real y); + /// + alias fdiml = __fdimieee128; + /// + pure real __fmaxieee128(real x, real y); + /// + alias fmaxl = __fmaxieee128; + /// + pure real __fminieee128(real x, real y); + /// + alias fminl = __fminieee128; + /// + pure real __fmaieee128(real x, real y, real z); + /// + alias fmal = __fmaieee128; + } + else + { + /// + real acosl(real x); + /// + real asinl(real x); + /// + pure real atanl(real x); + /// + real atan2l(real y, real x); + /// + pure real cosl(real x); + /// + pure real sinl(real x); + /// + pure real tanl(real x); + /// + real acoshl(real x); + /// + pure real asinhl(real x); + /// + real atanhl(real x); + /// + real coshl(real x); + /// + real sinhl(real x); + /// + pure real tanhl(real x); + /// + real expl(real x); + /// + real exp2l(real x); + /// + real expm1l(real x); + /// + pure real frexpl(real value, int* exp); + /// + int ilogbl(real x); + /// + real ldexpl(real x, int exp); + /// + real logl(real x); + /// + real log10l(real x); + /// + real log1pl(real x); + /// + real log2l(real x); + /// + real logbl(real x); + /// + pure real modfl(real value, real *iptr); + /// + real scalbnl(real x, int n); + /// + real scalblnl(real x, c_long n); + /// + pure real cbrtl(real x); + version (CRuntime_Microsoft) + { + } + else + { + /// + pure float fabsf(float x); + /// + pure real fabsl(real x); + } + /// + real hypotl(real x, real y); + /// + real powl(real x, real y); + /// + real sqrtl(real x); + /// + pure real erfl(real x); + /// + real erfcl(real x); + /// + real lgammal(real x); + /// + real tgammal(real x); + /// + pure real ceill(real x); + /// + pure real floorl(real x); + /// + pure real nearbyintl(real x); + /// + pure real rintl(real x); + /// + c_long lrintl(real x); + /// + long llrintl(real x); + /// + pure real roundl(real x); + /// + c_long lroundl(real x); + /// + long llroundl(real x); + /// + pure real truncl(real x); + /// + real fmodl(real x, real y); + /// + real remainderl(real x, real y); + /// + real remquol(real x, real y, int* quo); + /// + pure real copysignl(real x, real y); + /// + pure real nanl(char* tagp); + /// + real nextafterl(real x, real y); + /// + double nexttoward(double x, real y); + /// + float nexttowardf(float x, real y); + /// + real nexttowardl(real x, real y); + /// + real fdiml(real x, real y); + /// + pure real fmaxl(real x, real y); + /// + pure real fminl(real x, real y); + /// + pure real fmal(real x, real y, real z); + } } diff --git a/libphobos/libdruntime/core/stdc/stdio.d b/libphobos/libdruntime/core/stdc/stdio.d index d3ee2cae8e5..c9b6d7b6b7e 100644 --- a/libphobos/libdruntime/core/stdc/stdio.d +++ b/libphobos/libdruntime/core/stdc/stdio.d @@ -1303,54 +1303,118 @@ version (MinGW) } else version (CRuntime_Glibc) { - /// - pragma(printf) - int fprintf(FILE* stream, scope const char* format, scope const ...); - /// - pragma(scanf) - int __isoc99_fscanf(FILE* stream, scope const char* format, scope ...); - /// - alias fscanf = __isoc99_fscanf; - /// - pragma(printf) - int sprintf(scope char* s, scope const char* format, scope const ...); - /// - pragma(scanf) - int __isoc99_sscanf(scope const char* s, scope const char* format, scope ...); - /// - alias sscanf = __isoc99_sscanf; - /// - pragma(printf) - int vfprintf(FILE* stream, scope const char* format, va_list arg); - /// - pragma(scanf) - int __isoc99_vfscanf(FILE* stream, scope const char* format, va_list arg); - /// - alias vfscanf = __isoc99_vfscanf; - /// - pragma(printf) - int vsprintf(scope char* s, scope const char* format, va_list arg); - /// - pragma(scanf) - int __isoc99_vsscanf(scope const char* s, scope const char* format, va_list arg); - /// - alias vsscanf = __isoc99_vsscanf; - /// - pragma(printf) - int vprintf(scope const char* format, va_list arg); - /// - pragma(scanf) - int __isoc99_vscanf(scope const char* format, va_list arg); - /// - alias vscanf = __isoc99_vscanf; - /// - pragma(printf) - int printf(scope const char* format, scope const ...); - /// - pragma(scanf) - int __isoc99_scanf(scope const char* format, scope ...); - /// - alias scanf = __isoc99_scanf; + static if (PPCUseIEEE128) + { + /// + pragma(printf) + int __fprintfieee128(FILE* stream, scope const char* format, scope const ...); + /// + alias fprintf = __fprintfieee128; + /// + pragma(scanf) + int __isoc99_fscanfieee128(FILE* stream, scope const char* format, scope ...); + /// + alias fscanf = __isoc99_fscanfieee128; + /// + pragma(printf) + int __sprintfieee128(scope char* s, scope const char* format, scope const ...); + /// + alias sprintf = __sprintfieee128; + /// + pragma(scanf) + int __isoc99_sscanfieee128(scope const char* s, scope const char* format, scope ...); + /// + alias sscanf = __isoc99_sscanfieee128; + /// + pragma(printf) + int vfprintf(FILE* stream, scope const char* format, va_list arg); + /// + pragma(scanf) + int __isoc99_vfscanfieee128(FILE* stream, scope const char* format, va_list arg); + /// + alias vfscanf = __isoc99_vfscanfieee128; + /// + pragma(printf) + int __vsprintfieee128(scope char* s, scope const char* format, va_list arg); + /// + alias vsprintf = __vsprintfieee128; + /// + pragma(scanf) + int __isoc99_vsscanfieee128(scope const char* s, scope const char* format, va_list arg); + /// + alias vsscanf = __isoc99_vsscanfieee128; + /// + pragma(printf) + int __vprintfieee128(scope const char* format, va_list arg); + /// + alias vprintf = __vprintfieee128; + /// + pragma(scanf) + int __isoc99_vfscanfieee128(scope const char* format, va_list arg); + /// + alias vscanf = __isoc99_vfscanfieee128; + /// + pragma(printf) + int __printfieee128(scope const char* format, scope const ...); + /// + alias printf = __printfieee128; + /// + pragma(scanf) + int __isoc99_scanfieee128(scope const char* format, scope ...); + /// + alias scanf = __isoc99_scanfieee128; + } + else + { + /// + pragma(printf) + int fprintf(FILE* stream, scope const char* format, scope const ...); + /// + pragma(scanf) + int __isoc99_fscanf(FILE* stream, scope const char* format, scope ...); + /// + alias fscanf = __isoc99_fscanf; + /// + pragma(printf) + int sprintf(scope char* s, scope const char* format, scope const ...); + /// + pragma(scanf) + int __isoc99_sscanf(scope const char* s, scope const char* format, scope ...); + /// + alias sscanf = __isoc99_sscanf; + /// + pragma(printf) + int vfprintf(FILE* stream, scope const char* format, va_list arg); + /// + pragma(scanf) + int __isoc99_vfscanf(FILE* stream, scope const char* format, va_list arg); + /// + alias vfscanf = __isoc99_vfscanf; + /// + pragma(printf) + int vsprintf(scope char* s, scope const char* format, va_list arg); + /// + pragma(scanf) + int __isoc99_vsscanf(scope const char* s, scope const char* format, va_list arg); + /// + alias vsscanf = __isoc99_vsscanf; + /// + pragma(printf) + int vprintf(scope const char* format, va_list arg); + /// + pragma(scanf) + int __isoc99_vscanf(scope const char* format, va_list arg); + /// + alias vscanf = __isoc99_vscanf; + /// + pragma(printf) + int printf(scope const char* format, scope const ...); + /// + pragma(scanf) + int __isoc99_scanf(scope const char* format, scope ...); + /// + alias scanf = __isoc99_scanf; + } } else { @@ -1544,12 +1608,28 @@ else version (CRuntime_Glibc) int fileno(FILE *); } - /// - pragma(printf) - int snprintf(scope char* s, size_t n, scope const char* format, scope const ...); - /// - pragma(printf) - int vsnprintf(scope char* s, size_t n, scope const char* format, va_list arg); + static if (PPCUseIEEE128) + { + /// + pragma(printf) + int __snprintfieee128(scope char* s, size_t n, scope const char* format, scope const ...); + /// + alias snprintf = __snprintfieee128; + /// + pragma(printf) + int __vsnprintfieee128(scope char* s, size_t n, scope const char* format, va_list arg); + /// + alias vsnprintf = __vsnprintfieee128; + } + else + { + /// + pragma(printf) + int snprintf(scope char* s, size_t n, scope const char* format, scope const ...); + /// + pragma(printf) + int vsnprintf(scope char* s, size_t n, scope const char* format, va_list arg); + } // // Gnu under-the-hood C I/O functions. Uses _iobuf* for the unshared diff --git a/libphobos/libdruntime/core/stdc/stdlib.d b/libphobos/libdruntime/core/stdc/stdlib.d index bd5fc2b15ea..52fa1d0f70c 100644 --- a/libphobos/libdruntime/core/stdc/stdlib.d +++ b/libphobos/libdruntime/core/stdc/stdlib.d @@ -147,8 +147,16 @@ version (CRuntime_Microsoft) } else { - /// Added to Bionic since Lollipop. - real strtold(scope inout(char)* nptr, scope inout(char)** endptr); + static if (PPCUseIEEE128) + { + real __strtoieee128(scope inout(char)* nptr, scope inout(char)** endptr); + alias strtold = __strtoieee128; + } + else + { + /// Added to Bionic since Lollipop. + real strtold(scope inout(char)* nptr, scope inout(char)** endptr); + } } // No unsafe pointer manipulation. diff --git a/libphobos/libdruntime/core/sys/windows/sql.d b/libphobos/libdruntime/core/sys/windows/sql.d index 9054ce589e8..013d9f06e60 100644 --- a/libphobos/libdruntime/core/sys/windows/sql.d +++ b/libphobos/libdruntime/core/sys/windows/sql.d @@ -11,13 +11,15 @@ $(RED Warning: */ module core.sys.windows.sql; + +enum ODBCVER = 0x0400; + +deprecated ("The ODBC 3.5 modules are deprecated. Please use the ODBC4 modules in the `etc.c.odbc` package."): version (Windows): public import core.sys.windows.sqltypes; import core.sys.windows.windef; -enum ODBCVER = 0x0351; - enum SQL_ACCESSIBLE_PROCEDURES=20; enum SQL_ACCESSIBLE_TABLES=19; enum SQL_ALL_TYPES=0; diff --git a/libphobos/libdruntime/core/sys/windows/sqlext.d b/libphobos/libdruntime/core/sys/windows/sqlext.d index b871fbbbb84..a53918394dc 100644 --- a/libphobos/libdruntime/core/sys/windows/sqlext.d +++ b/libphobos/libdruntime/core/sys/windows/sqlext.d @@ -11,6 +11,7 @@ $(RED Warning: */ module core.sys.windows.sqlext; +deprecated ("The ODBC 3.5 modules are deprecated. Please use the ODBC4 modules in the `etc.c.odbc` package."): version (Windows): /* Conversion notes: diff --git a/libphobos/libdruntime/core/sys/windows/sqltypes.d b/libphobos/libdruntime/core/sys/windows/sqltypes.d index 04fac6bac6a..ca91f015851 100644 --- a/libphobos/libdruntime/core/sys/windows/sqltypes.d +++ b/libphobos/libdruntime/core/sys/windows/sqltypes.d @@ -70,6 +70,10 @@ alias long ODBCINT64, SQLBIGINT; alias ulong SQLUBIGINT; //} +//Everything above this line may by used by odbcinst.d +//Everything below this line is deprecated +deprecated ("The ODBC 3.5 modules are deprecated. Please use the ODBC4 modules in the `etc.c.odbc` package."): + struct DATE_STRUCT { SQLSMALLINT year; SQLUSMALLINT month; diff --git a/libphobos/libdruntime/core/sys/windows/sqlucode.d b/libphobos/libdruntime/core/sys/windows/sqlucode.d index e7ae1d276be..d20952d5b4b 100644 --- a/libphobos/libdruntime/core/sys/windows/sqlucode.d +++ b/libphobos/libdruntime/core/sys/windows/sqlucode.d @@ -11,6 +11,7 @@ $(RED Warning: */ module core.sys.windows.sqlucode; +deprecated ("The ODBC 3.5 modules are deprecated. Please use the ODBC4 modules in the `etc.c.odbc` package."): version (Windows): version (ANSI) {} else version = Unicode; diff --git a/libphobos/libdruntime/object.d b/libphobos/libdruntime/object.d index d8389ae491f..e274fd30e8c 100644 --- a/libphobos/libdruntime/object.d +++ b/libphobos/libdruntime/object.d @@ -1324,8 +1324,16 @@ class TypeInfo_AssociativeArray : TypeInfo override @property inout(TypeInfo) next() nothrow pure inout { return value; } override @property uint flags() nothrow pure const { return 1; } + // TypeInfo entry is generated from the type of this template to help rt/aaA.d + static struct Entry(K, V) + { + K key; + V value; + } + TypeInfo value; TypeInfo key; + TypeInfo entry; override @property size_t talign() nothrow pure const { diff --git a/libphobos/libdruntime/rt/aaA.d b/libphobos/libdruntime/rt/aaA.d index 2bddeaf41d7..3b4bee04058 100644 --- a/libphobos/libdruntime/rt/aaA.d +++ b/libphobos/libdruntime/rt/aaA.d @@ -66,13 +66,13 @@ private: if ((ti.key.flags | ti.value.flags) & 1) flags |= Flags.hasPointers; - entryTI = fakeEntryTI(this, ti.key, ti.value); + entryTI = ti.entry; } Bucket[] buckets; uint used; uint deleted; - TypeInfo_Struct entryTI; + const(TypeInfo) entryTI; uint firstUsed; immutable uint keysz; immutable uint valsz; @@ -229,15 +229,6 @@ private void* allocEntry(scope const Impl* aa, scope const void* pkey) return res; } -package void entryDtor(void* p, const TypeInfo_Struct sti) -{ - // key and value type info stored after the TypeInfo_Struct by tiEntry() - auto sizeti = __traits(classInstanceSize, TypeInfo_Struct); - auto extra = cast(const(TypeInfo)*)(cast(void*) sti + sizeti); - extra[0].destroy(p); - extra[1].destroy(p + talign(extra[0].tsize, extra[1].talign)); -} - private bool hasDtor(const TypeInfo ti) pure nothrow { import rt.lifetime : unqualify; @@ -258,132 +249,6 @@ private immutable(void)* getRTInfo(const TypeInfo ti) pure nothrow return isNoClass ? ti.rtInfo() : rtinfoHasPointers; } -// build type info for Entry with additional key and value fields -TypeInfo_Struct fakeEntryTI(ref Impl aa, const TypeInfo keyti, const TypeInfo valti) nothrow -{ - import rt.lifetime : unqualify; - - auto kti = unqualify(keyti); - auto vti = unqualify(valti); - - // figure out whether RTInfo has to be generated (indicated by rtisize > 0) - enum pointersPerWord = 8 * (void*).sizeof * (void*).sizeof; - auto rtinfo = rtinfoNoPointers; - size_t rtisize = 0; - immutable(size_t)* keyinfo = void; - immutable(size_t)* valinfo = void; - if (aa.flags & Impl.Flags.hasPointers) - { - // classes are references - keyinfo = cast(immutable(size_t)*) getRTInfo(keyti); - valinfo = cast(immutable(size_t)*) getRTInfo(valti); - - if (keyinfo is rtinfoHasPointers && valinfo is rtinfoHasPointers) - rtinfo = rtinfoHasPointers; - else - rtisize = 1 + (aa.valoff + aa.valsz + pointersPerWord - 1) / pointersPerWord; - } - bool entryHasDtor = hasDtor(kti) || hasDtor(vti); - if (rtisize == 0 && !entryHasDtor) - return null; - - // save kti and vti after type info for struct - enum sizeti = __traits(classInstanceSize, TypeInfo_Struct); - void* p = GC.malloc(sizeti + (2 + rtisize) * (void*).sizeof); - import core.stdc.string : memcpy; - - memcpy(p, __traits(initSymbol, TypeInfo_Struct).ptr, sizeti); - - auto ti = cast(TypeInfo_Struct) p; - auto extra = cast(TypeInfo*)(p + sizeti); - extra[0] = cast() kti; - extra[1] = cast() vti; - - static immutable tiMangledName = "S2rt3aaA__T5EntryZ"; - ti.mangledName = tiMangledName; - - ti.m_RTInfo = rtisize > 0 ? rtinfoEntry(aa, keyinfo, valinfo, cast(size_t*)(extra + 2), rtisize) : rtinfo; - ti.m_flags = ti.m_RTInfo is rtinfoNoPointers ? cast(TypeInfo_Struct.StructFlags)0 : TypeInfo_Struct.StructFlags.hasPointers; - - // we don't expect the Entry objects to be used outside of this module, so we have control - // over the non-usage of the callback methods and other entries and can keep these null - // xtoHash, xopEquals, xopCmp, xtoString and xpostblit - immutable entrySize = aa.valoff + aa.valsz; - ti.m_init = (cast(ubyte*) null)[0 .. entrySize]; // init length, but not ptr - - if (entryHasDtor) - { - // xdtor needs to be built from the dtors of key and value for the GC - ti.xdtorti = &entryDtor; - ti.m_flags |= TypeInfo_Struct.StructFlags.isDynamicType; - } - - ti.m_align = cast(uint) max(kti.talign, vti.talign); - - return ti; -} - -// build appropriate RTInfo at runtime -immutable(void)* rtinfoEntry(ref Impl aa, immutable(size_t)* keyinfo, - immutable(size_t)* valinfo, size_t* rtinfoData, size_t rtinfoSize) pure nothrow -{ - enum bitsPerWord = 8 * size_t.sizeof; - - rtinfoData[0] = aa.valoff + aa.valsz; - rtinfoData[1..rtinfoSize] = 0; - - void copyKeyInfo(string src)() - { - size_t pos = 1; - size_t keybits = aa.keysz / (void*).sizeof; - while (keybits >= bitsPerWord) - { - rtinfoData[pos] = mixin(src); - keybits -= bitsPerWord; - pos++; - } - if (keybits > 0) - rtinfoData[pos] = mixin(src) & ((size_t(1) << keybits) - 1); - } - - if (keyinfo is rtinfoHasPointers) - copyKeyInfo!"~size_t(0)"(); - else if (keyinfo !is rtinfoNoPointers) - copyKeyInfo!"keyinfo[pos]"(); - - void copyValInfo(string src)() - { - size_t bitpos = aa.valoff / (void*).sizeof; - size_t pos = 1; - size_t dstpos = 1 + bitpos / bitsPerWord; - size_t begoff = bitpos % bitsPerWord; - size_t valbits = aa.valsz / (void*).sizeof; - size_t endoff = (bitpos + valbits) % bitsPerWord; - for (;;) - { - const bits = bitsPerWord - begoff; - size_t s = mixin(src); - rtinfoData[dstpos] |= s << begoff; - if (begoff > 0 && valbits > bits) - rtinfoData[dstpos+1] |= s >> bits; - if (valbits < bitsPerWord) - break; - valbits -= bitsPerWord; - dstpos++; - pos++; - } - if (endoff > 0) - rtinfoData[dstpos] &= (size_t(1) << endoff) - 1; - } - - if (valinfo is rtinfoHasPointers) - copyValInfo!"~size_t(0)"(); - else if (valinfo !is rtinfoNoPointers) - copyValInfo!"valinfo[pos]"(); - - return cast(immutable(void)*) rtinfoData; -} - unittest { void test(K, V)() @@ -402,12 +267,10 @@ unittest if (valrti is rtinfoNoPointers && keyrti is rtinfoNoPointers) { assert(!(impl.flags & Impl.Flags.hasPointers)); - assert(impl.entryTI is null); } else if (valrti is rtinfoHasPointers && keyrti is rtinfoHasPointers) { assert(impl.flags & Impl.Flags.hasPointers); - assert(impl.entryTI is null); } else { @@ -977,7 +840,10 @@ unittest aa1 = null; aa2 = null; aa3 = null; - GC.runFinalizers((cast(char*)&entryDtor)[0 .. 1]); + auto dtor1 = typeid(TypeInfo_AssociativeArray.Entry!(int, T)).xdtor; + GC.runFinalizers((cast(char*)dtor1)[0 .. 1]); + auto dtor2 = typeid(TypeInfo_AssociativeArray.Entry!(T, int)).xdtor; + GC.runFinalizers((cast(char*)dtor2)[0 .. 1]); assert(T.dtor == 6 && T.postblit == 2); } diff --git a/libphobos/libdruntime/rt/lifetime.d b/libphobos/libdruntime/rt/lifetime.d index b63a5bf5266..f77d8b9c4e8 100644 --- a/libphobos/libdruntime/rt/lifetime.d +++ b/libphobos/libdruntime/rt/lifetime.d @@ -1587,16 +1587,13 @@ deprecated unittest GC.free(blkinf.base); // associative arrays - import rt.aaA : entryDtor; - // throw away all existing AA entries with dtor - GC.runFinalizers((cast(char*)&entryDtor)[0..1]); - S1[int] aa1; aa1[0] = S1(0); aa1[1] = S1(1); dtorCount = 0; aa1 = null; - GC.runFinalizers((cast(char*)&entryDtor)[0..1]); + auto dtor1 = typeid(TypeInfo_AssociativeArray.Entry!(int, S1)).xdtor; + GC.runFinalizers((cast(char*)dtor1)[0..1]); assert(dtorCount == 2); int[S1] aa2; @@ -1605,7 +1602,8 @@ deprecated unittest aa2[S1(2)] = 2; dtorCount = 0; aa2 = null; - GC.runFinalizers((cast(char*)&entryDtor)[0..1]); + auto dtor2 = typeid(TypeInfo_AssociativeArray.Entry!(S1, int)).xdtor; + GC.runFinalizers((cast(char*)dtor2)[0..1]); assert(dtorCount == 3); S1[2][int] aa3; @@ -1613,7 +1611,8 @@ deprecated unittest aa3[1] = [S1(1),S1(3)]; dtorCount = 0; aa3 = null; - GC.runFinalizers((cast(char*)&entryDtor)[0..1]); + auto dtor3 = typeid(TypeInfo_AssociativeArray.Entry!(int, S1[2])).xdtor; + GC.runFinalizers((cast(char*)dtor3)[0..1]); assert(dtorCount == 4); } |
