commit dmd for openSUSE:Factory
![](https://seccdn.libravatar.org/avatar/e2145bc5cf53dda95c308a3c75e8fef3.jpg?s=120&d=mm&r=g)
Hello community, here is the log from the commit of package dmd for openSUSE:Factory checked in at 2018-10-15 09:45:54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/dmd (Old) and /work/SRC/openSUSE:Factory/.dmd.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Package is "dmd" Mon Oct 15 09:45:54 2018 rev:20 rq:641928 version:2.082.1 Changes: -------- --- /work/SRC/openSUSE:Factory/dmd/dmd.changes 2018-09-15 15:36:35.428971545 +0200 +++ /work/SRC/openSUSE:Factory/.dmd.new/dmd.changes 2018-10-15 09:46:29.211167180 +0200 @@ -1,0 +2,14 @@ +Sun Oct 14 14:14:28 UTC 2018 - Matthias Eliasson <matthias.eliasson@gmail.com> + +- Update to 2.082.1 + - DMD Compiler regressions + * Could not CTFE with std.math.exp from 2.082.0 + * [REG 2.081] Can no longer override pragma(lib) with -L switch + * Some source files names are no longer accepted + - Phobos regressions + * Templated format with variable width allocates 2GB of RAM per call. + - Phobos bugs + * std.net.curl.post cannot be used with !ubyte + * std.algorithm.subsitute wrong results for single subrange substitution + +------------------------------------------------------------------- Old: ---- dmd-2.082.0.tar.gz druntime-2.082.0.tar.gz phobos-2.082.0.tar.gz New: ---- dmd-2.082.1.tar.gz druntime-2.082.1.tar.gz phobos-2.082.1.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ dmd.spec ++++++ --- /var/tmp/diff_new_pack.gP6Oj4/_old 2018-10-15 09:46:46.699147680 +0200 +++ /var/tmp/diff_new_pack.gP6Oj4/_new 2018-10-15 09:46:46.699147680 +0200 @@ -12,7 +12,7 @@ # license that conforms to the Open Source Definition (Version 1.9) # published by the Open Source Initiative. -# Please submit bugfixes or comments via http://bugs.opensuse.org/ +# Please submit bugfixes or comments via https://bugs.opensuse.org/ # @@ -20,7 +20,7 @@ %define sover 0_82 %define auto_bootstrap 1 Name: dmd -Version: 2.082.0 +Version: 2.082.1 Release: 0 Summary: D Programming Language 2.0 License: BSL-1.0 ++++++ dmd-2.082.0.tar.gz -> dmd-2.082.1.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dmd-2.082.0/VERSION new/dmd-2.082.1/VERSION --- old/dmd-2.082.0/VERSION 2018-09-01 21:45:08.000000000 +0200 +++ new/dmd-2.082.1/VERSION 2018-10-11 14:20:27.000000000 +0200 @@ -1 +1 @@ -v2.082.0 +v2.082.1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dmd-2.082.0/appveyor.sh new/dmd-2.082.1/appveyor.sh --- old/dmd-2.082.0/appveyor.sh 2018-09-01 21:45:08.000000000 +0200 +++ new/dmd-2.082.1/appveyor.sh 2018-10-11 14:20:27.000000000 +0200 @@ -44,8 +44,8 @@ fi if [ $D_COMPILER == "dmd" ]; then - #appveyor DownloadFile "http://downloads.dlang.org/releases/2.x/${D_VERSION}/dmd.${D_VERSION}.windows.7z" -FileName dmd2.7z - appveyor DownloadFile "http://nightlies.dlang.org/dmd-master-2017-12-22/dmd.master.windows.7z" -FileName dmd2.7z + appveyor DownloadFile "http://downloads.dlang.org/releases/2.x/${D_VERSION}/dmd.${D_VERSION}.windows.7z" -FileName dmd2.7z + #appveyor DownloadFile "http://nightlies.dlang.org/dmd-master-2017-12-22/dmd.master.windows.7z" -FileName dmd2.7z 7z x dmd2.7z > /dev/null export PATH=$PWD/dmd2/windows/bin/:$PATH export DMD=/c/projects/dmd2/windows/bin/dmd.exe @@ -57,8 +57,10 @@ ! git ls-remote --exit-code --heads https://github.com/dlang/$proj.git $APPVEYOR_REPO_BRANCH > /dev/null; then # use master as fallback for other repos to test feature branches clone https://github.com/dlang/$proj.git $proj master + echo "+++ Switched $proj to branch master (APPVEYOR_REPO_BRANCH=$APPVEYOR_REPO_BRANCH)" else clone https://github.com/dlang/$proj.git $proj $APPVEYOR_REPO_BRANCH + echo "+++ Switched $proj to branch $APPVEYOR_REPO_BRANCH" fi done diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dmd-2.082.0/appveyor.yml new/dmd-2.082.1/appveyor.yml --- old/dmd-2.082.0/appveyor.yml 2018-09-01 21:45:08.000000000 +0200 +++ new/dmd-2.082.1/appveyor.yml 2018-10-11 14:20:27.000000000 +0200 @@ -5,7 +5,7 @@ matrix: - ARCH: x64 D_COMPILER: dmd - D_VERSION: 2.077.1 + D_VERSION: 2.079.1 C_COMPILER: MSVC VISUALD_VER: v0.45.1-rc2 LDC_VERSION: 1.8.0 @@ -22,7 +22,7 @@ artifacts: - path: src/dmd.exe name: dmd 64-bit - - path: generated/Windows/Release/Win32/dmd.exe + - path: generated/Windows/Release/Win32/dmd.exe name: dmd 32-bit built with LDC init: @@ -43,7 +43,7 @@ If (-not (Test-Path $Env:LDC_DIR/bin/ldmd2.exe)) { echo "Unexpected LDC installation, $Env:LDC_INSTALLER/bin/ldmd2.exe missing" } - + # Download & install Visual D (needs admin rights?) - set VISUALD_INSTALLER=VisualD-%VISUALD_VER%.exe - set VISUALD_URL=https://github.com/dlang/visuald/releases/download/%VISUALD_VER%/%VISUALD_IN... diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dmd-2.082.0/changelog/betterc_cmp_types.dd new/dmd-2.082.1/changelog/betterc_cmp_types.dd --- old/dmd-2.082.0/changelog/betterc_cmp_types.dd 2018-09-01 21:45:08.000000000 +0200 +++ new/dmd-2.082.1/changelog/betterc_cmp_types.dd 1970-01-01 01:00:00.000000000 +0100 @@ -1,42 +0,0 @@ -Support for comparing arrays of unsigned byte-sized types and structs has been added to -betterC - -Prior to this release, the following code did not build in -betterC, but will with this release. - ---- -// (Prior to this release) Error: TypeInfo cannot be used with -betterC -struct Sint -{ - int x; - this(int v) { x = v;} -} - -extern(C) void main() -{ - Sint[6] a1 = [Sint(1), Sint(2), Sint(3), Sint(1), Sint(2), Sint(3)]; - assert(a1[0..3] == a1[3..$]); -} ---- - ---- -// (Prior to this release) Linker Error: undefined reference to `core.internal.string.dstrcmp` -extern(C) void main() -{ - auto s = "abc"; - switch(s) - { - case "abc": - break; - default: - break; - } -} ---- - ---- -// (Prior to this release) Linker Error: undefined reference to `core.internal.string.dstrcmp` -extern(C) void main() -{ - char[6] a = [1,2,3,1,2,3]; - assert(a[0..3] >= a[3..$]); // failed for any byte-sized type (e.g. `char`, `ubyte`, etc...) -} ---- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dmd-2.082.0/changelog/betterc_versions.dd new/dmd-2.082.1/changelog/betterc_versions.dd --- old/dmd-2.082.0/changelog/betterc_versions.dd 2018-09-01 21:45:08.000000000 +0200 +++ new/dmd-2.082.1/changelog/betterc_versions.dd 1970-01-01 01:00:00.000000000 +0100 @@ -1,6 +0,0 @@ -Added `D_ModuleInfo`, `D_Exceptions`, and `D_TypeInfo` version identifiers - -`D_ModuleInfo`, `D_Exceptions`, and `D_TypeInfo` version identifiers were added to allow -better precision in druntime and other library implementations. - -See $(LINK2 https://dlang.org/spec/version.html#predefined-versions, Predefined Versions) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dmd-2.082.0/changelog/cond_assign.dd new/dmd-2.082.1/changelog/cond_assign.dd --- old/dmd-2.082.0/changelog/cond_assign.dd 2018-09-01 21:45:08.000000000 +0200 +++ new/dmd-2.082.1/changelog/cond_assign.dd 1970-01-01 01:00:00.000000000 +0100 @@ -1,22 +0,0 @@ -Deprecate conditional expression followed by an assign expression - -When a conditional expression is the left operand of an assign -expression, they would be parsed as an assignment to $(I the result) of -the conditional. This has now been deprecated. To preserve the existing -behaviour, add parentheses for the conditional without including the -assignment: - ---- -bool test; -int a, b, c; -... -test ? a = b : c = 2; // Deprecated -(test ? a = b : c) = 2; // Equivalent ---- - -This makes the intent clearer, because the first statement can easily -be misread as the following code: - ---- -test ? a = b : (c = 2); ---- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dmd-2.082.0/changelog/debug-unsafe.dd new/dmd-2.082.1/changelog/debug-unsafe.dd --- old/dmd-2.082.0/changelog/debug-unsafe.dd 2018-09-01 21:45:08.000000000 +0200 +++ new/dmd-2.082.1/changelog/debug-unsafe.dd 1970-01-01 01:00:00.000000000 +0100 @@ -1,21 +0,0 @@ -Unsafe code can now be used in debug blocks - -When writing debug code, one isn't interested in the type safety, but a pleasant -debugging experience. -The type checker already allowed to escape `pure` and `@nogc` within `debug` -statement. -With this release, `@system` code can be called from `debug` statements too: - ---- -void main() -{ - int[] arr = [1, 2]; - debug unsafeCode(arr); -} - -@system void unsafeCode(T)(T[] arr) -{ - import core.stdc.stdio; - printf("arr.ptr: %p", arr.ptr); -} ---- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dmd-2.082.0/changelog/deprecate-opDot.dd new/dmd-2.082.1/changelog/deprecate-opDot.dd --- old/dmd-2.082.0/changelog/deprecate-opDot.dd 2018-09-01 21:45:08.000000000 +0200 +++ new/dmd-2.082.1/changelog/deprecate-opDot.dd 1970-01-01 01:00:00.000000000 +0100 @@ -1,51 +0,0 @@ -Deprecate usage of `opDot` - -`opDot` was the D1 analog to `alias this`. -However, `alias this` covers all use cases of `opDot`, but ensures safety. - ---- -struct S -{ - int a, b; -} -struct T -{ - S s; - - S* opDot() - { - return &s; - } -} - -void main() -{ - T t; - t.a = 4; - assert(t.a == 4); - t.b = 5; -} ---- - -With `alias this`: - ---- -struct S -{ - int a, b; -} -struct T -{ - S s; - - alias s this; -} - -void main() @safe -{ - T t; - t.a = 4; - assert(t.a == 4); - t.b = 5; -} ---- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dmd-2.082.0/changelog/enum_attributes.dd new/dmd-2.082.1/changelog/enum_attributes.dd --- old/dmd-2.082.0/changelog/enum_attributes.dd 2018-09-01 21:45:08.000000000 +0200 +++ new/dmd-2.082.1/changelog/enum_attributes.dd 1970-01-01 01:00:00.000000000 +0100 @@ -1,24 +0,0 @@ -D now supports deprecated, @disable and user-defined attributes on enum members - -Example ---- -template AliasSeq(TList...) -{ - alias AliasSeq = TList; -} - -enum MyEnum -{ - @("uda0") value0, - @disable value1, - deprecated value2 // Deprecation: enum member `main.MyEnum.value2` is deprecated -} - -static assert(__traits(getAttributes, MyEnum.value0) == AliasSeq!("uda0")); - -void main() -{ - auto v1 = MyEnum.value1; // Error: enum member `main.MyEnum.value1` cannot be used because it is annotated with `@disable` -} ---- - diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dmd-2.082.0/changelog/error_for_c-style_arrays.dd new/dmd-2.082.1/changelog/error_for_c-style_arrays.dd --- old/dmd-2.082.0/changelog/error_for_c-style_arrays.dd 2018-09-01 21:45:08.000000000 +0200 +++ new/dmd-2.082.1/changelog/error_for_c-style_arrays.dd 1970-01-01 01:00:00.000000000 +0100 @@ -1,9 +0,0 @@ -Deprecated C-style array declarations will now result in a compilation error - -The deprecation period for C-style array declarations has expired. Beginning with this -release, declaring arrays with C-style syntax will result in an error. - ---- -int a[2]; // Error: instead of C-style syntax, use D-style `int a[2]` -int[2] b; // OK ---- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dmd-2.082.0/changelog/fix19043.dd new/dmd-2.082.1/changelog/fix19043.dd --- old/dmd-2.082.0/changelog/fix19043.dd 2018-09-01 21:45:08.000000000 +0200 +++ new/dmd-2.082.1/changelog/fix19043.dd 1970-01-01 01:00:00.000000000 +0100 @@ -1,13 +0,0 @@ -Mangling of extern(C++) template on Windows now correctly mangles const non-pointer template parameters. - -It used to ignore the const and was missing the $$C escape prefix. - ------ -extern(C++) struct foo(T) {} - -extern(C++) void test(foo!(const(char)) a) {} -// New -static assert(test.mangleof == "?test@@YAXU?$foo@$$CBD@@@Z"); -// Old -//static assert(test.mangleof == "?test@@YAXU?$foo@D@@@Z"); ------ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dmd-2.082.0/changelog/objc_offsetof_tupleof.dd new/dmd-2.082.1/changelog/objc_offsetof_tupleof.dd --- old/dmd-2.082.0/changelog/objc_offsetof_tupleof.dd 2018-09-01 21:45:08.000000000 +0200 +++ new/dmd-2.082.1/changelog/objc_offsetof_tupleof.dd 1970-01-01 01:00:00.000000000 +0100 @@ -1,14 +0,0 @@ -`.offsetof` and `.tupleof` for fields of Objective-C classes have now been disabled - -To solve the fragile base class problem [1] in Objective-C, fields have a -dynamic offset instead of a static offset. The compiler outputs a statically -known offset which later the dynamic loader can update, if necessary, when the -application is loaded. Due to this behavior it doesn't make sense to be able to -get the offset of a field at compile time, because this offset might not -actually be the same at runtime. - -To get the offset or value of a field, that is correct at runtime, functionality -from the Objective-C runtime can be used instead [2]. - -[1] $(LINK2 Fragile Binary Interface Problem, https://en.wikipedia.org/wiki/Fragile_binary_interface_problem) -[2] $(LINK2 Objective-C Runtime, https://developer.apple.com/documentation/objectivec/objective_c_runtime) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dmd-2.082.0/changelog/osx64_long_cppmangling.dd new/dmd-2.082.1/changelog/osx64_long_cppmangling.dd --- old/dmd-2.082.0/changelog/osx64_long_cppmangling.dd 2018-09-01 21:45:08.000000000 +0200 +++ new/dmd-2.082.1/changelog/osx64_long_cppmangling.dd 1970-01-01 01:00:00.000000000 +0100 @@ -1,10 +0,0 @@ -64-bit OS X: Revert C++ mangling of `long` to pre-2.079 to restore `size_t` interop - -Direct interop of D `size_t` and C++ `size_t` was working before 2.079, on all platforms -except for 32-bit OS X. By mangling D `long` as C++ `long long` on 64-bit OS X starting -with 2.079, `size_t` interop broke on a more relevant platform. -With new/fixed aliases, e.g., $(REF int64_t, core, stdc, stdint), -$(REF uint64_t, core, stdc, stdint) and $(REF cpp_size_t, core, stdc, config), there are -now proper tools for portable C++ interop wrt. integers. -Reverting to the previous C++ mangling on 64-bit OS X (C++ `long`) may save mixed D/C++ -code bases from the need of manual adaptations by skipping the 2.079-2.081 DMD versions. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dmd-2.082.0/changelog/uda-function-parameters.dd new/dmd-2.082.1/changelog/uda-function-parameters.dd --- old/dmd-2.082.0/changelog/uda-function-parameters.dd 2018-09-01 21:45:08.000000000 +0200 +++ new/dmd-2.082.1/changelog/uda-function-parameters.dd 1970-01-01 01:00:00.000000000 +0100 @@ -1,12 +0,0 @@ -UDAs on function parameters are now supported - -User-defined attributes on function parameters behave analogous to existing UDAs: - ---- -void example(@(22) string param) -{ - @(11) string var; - static assert([__traits(getAttributes, var)] == [11]); - static assert([__traits(getAttributes, param)] == [22]); -} ---- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dmd-2.082.0/semaphoreci.sh new/dmd-2.082.1/semaphoreci.sh --- old/dmd-2.082.0/semaphoreci.sh 2018-09-01 21:45:08.000000000 +0200 +++ new/dmd-2.082.1/semaphoreci.sh 2018-10-11 14:20:27.000000000 +0200 @@ -36,7 +36,14 @@ # Always source a DMD instance ################################################################################ -install_d "$DMD" +# FIXME: v2.082.0 has a broken DUB which fails the CI +# Remove this when a fixed v2.082.1 is released +# See https://github.com/dlang/dub/issues/1551 +if [ "$DMD" == "dmd" ]; then + install_d "dmd-2.081.2" +else + install_d "$DMD" +fi ################################################################################ # Define commands diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dmd-2.082.0/src/dmd/builtin.d new/dmd-2.082.1/src/dmd/builtin.d --- old/dmd-2.082.0/src/dmd/builtin.d 2018-09-01 21:45:08.000000000 +0200 +++ new/dmd-2.082.1/src/dmd/builtin.d 2018-10-11 14:20:27.000000000 +0200 @@ -124,6 +124,13 @@ return new RealExp(loc, CTFloat.log10(arg0.toReal()), arg0.type); } +extern (C++) Expression eval_exp(Loc loc, FuncDeclaration fd, Expressions* arguments) +{ + Expression arg0 = (*arguments)[0]; + assert(arg0.op == TOK.float64); + return new RealExp(loc, CTFloat.exp(arg0.toReal()), arg0.type); +} + extern (C++) Expression eval_expm1(Loc loc, FuncDeclaration fd, Expressions* arguments) { Expression arg0 = (*arguments)[0]; @@ -381,6 +388,7 @@ add_builtin("_D3std4math3tanFNaNbNiNeeZe", &eval_tan); add_builtin("_D3std4math4sqrtFNaNbNiNeeZe", &eval_sqrt); add_builtin("_D3std4math4fabsFNaNbNiNeeZe", &eval_fabs); + add_builtin("_D3std4math3expFNaNbNiNeeZe", &eval_exp); add_builtin("_D3std4math5expm1FNaNbNiNeeZe", &eval_expm1); add_builtin("_D3std4math4exp2FNaNbNiNeeZe", &eval_exp2); // @safe @nogc pure nothrow double function(double) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dmd-2.082.0/src/dmd/link.d new/dmd-2.082.1/src/dmd/link.d --- old/dmd-2.082.0/src/dmd/link.d 2018-09-01 21:45:08.000000000 +0200 +++ new/dmd-2.082.1/src/dmd/link.d 2018-10-11 14:20:27.000000000 +0200 @@ -569,38 +569,21 @@ argv.push("-Xlinker"); argv.push("--gc-sections"); } - /* Add each library, prefixing it with "-l". - * The order of libraries passed is: - * 1. any libraries passed with -L command line switch - * 2. libraries specified on the command line + /* Add libraries. The order of libraries passed is: + * 1. static libraries ending with *.a (global.params.libfiles) + * 2. link switches passed with -L command line switch (global.params.linkswitches) * 3. libraries specified by pragma(lib), which were appended - * to global.params.libfiles. - * 4. link switches, that may also contain -l libraries + * to global.params.libfiles. These are prefixed with "-l" + * 4. dynamic libraries passed to the command line (global.params.dllfiles) * 5. standard libraries. */ - for (size_t i = 0; i < global.params.libfiles.dim; i++) + foreach (p; global.params.libfiles) { - const(char)* p = global.params.libfiles[i]; - size_t plen = strlen(p); - if (plen > 2 && p[plen - 2] == '.' && p[plen - 1] == 'a') + if (FileName.equalsExt(p, "a")) argv.push(p); - else - { - char* s = cast(char*)mem.xmalloc(plen + 3); - s[0] = '-'; - s[1] = 'l'; - memcpy(s + 2, p, plen + 1); - argv.push(s); - } } - for (size_t i = 0; i < global.params.dllfiles.dim; i++) + foreach (p; global.params.linkswitches) { - const(char)* p = global.params.dllfiles[i]; - argv.push(p); - } - for (size_t i = 0; i < global.params.linkswitches.dim; i++) - { - const(char)* p = global.params.linkswitches[i]; if (!p || !p[0] || !(p[0] == '-' && (p[1] == 'l' || p[1] == 'L'))) { // Don't need -Xlinker if switch starts with -l or -L. @@ -610,6 +593,22 @@ } argv.push(p); } + foreach (p; global.params.libfiles) + { + if (!FileName.equalsExt(p, "a")) + { + const plen = strlen(p); + char* s = cast(char*)mem.xmalloc(plen + 3); + s[0] = '-'; + s[1] = 'l'; + memcpy(s + 2, p, plen + 1); + argv.push(s); + } + } + foreach (p; global.params.dllfiles) + { + argv.push(p); + } /* D runtime libraries must go after user specified libraries * passed with -l. */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dmd-2.082.0/src/dmd/root/ctfloat.d new/dmd-2.082.1/src/dmd/root/ctfloat.d --- old/dmd-2.082.0/src/dmd/root/ctfloat.d 2018-09-01 21:45:08.000000000 +0200 +++ new/dmd-2.082.1/src/dmd/root/ctfloat.d 2018-10-11 14:20:27.000000000 +0200 @@ -89,6 +89,7 @@ static real_t log2(real_t x) { return real_t(cast(double)core.stdc.math.log2l(cast(double)x)); } static real_t log10(real_t x) { return real_t(cast(double)core.stdc.math.log10l(cast(double)x)); } static real_t pow(real_t x, real_t y) { return real_t(cast(double)core.stdc.math.powl(cast(double)x, cast(double)y)); } + static real_t exp(real_t x) { return real_t(cast(double)core.stdc.math.expl(cast(double)x)); } static real_t expm1(real_t x) { return real_t(cast(double)core.stdc.math.expm1l(cast(double)x)); } static real_t exp2(real_t x) { return real_t(cast(double)core.stdc.math.exp2l(cast(double)x)); } static real_t copysign(real_t x, real_t s) { return real_t(cast(double)core.stdc.math.copysignl(cast(double)x, cast(double)s)); } @@ -103,6 +104,7 @@ static real_t log2(real_t x) { return core.stdc.math.log2l(x); } static real_t log10(real_t x) { return core.stdc.math.log10l(x); } static real_t pow(real_t x, real_t y) { return core.stdc.math.powl(x, y); } + static real_t exp(real_t x) { return core.stdc.math.expl(x); } static real_t expm1(real_t x) { return core.stdc.math.expm1l(x); } static real_t exp2(real_t x) { return core.stdc.math.exp2l(x); } static real_t copysign(real_t x, real_t s) { return core.stdc.math.copysignl(x, s); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dmd-2.082.0/src/dmd/root/filename.d new/dmd-2.082.1/src/dmd/root/filename.d --- old/dmd-2.082.0/src/dmd/root/filename.d 2018-09-01 21:45:08.000000000 +0200 +++ new/dmd-2.082.1/src/dmd/root/filename.d 2018-10-11 14:20:27.000000000 +0200 @@ -836,20 +836,24 @@ // path. static immutable prefix = `\\?\`w; + // prefix only needed for long names and non-UNC names + const needsPrefix = pathLength >= MAX_PATH && (wpath[0] != '\\' || wpath[1] != '\\'); + const prefixLength = needsPrefix ? prefix.length : 0; + // +1 for the null terminator - const bufferLength = pathLength + prefix.length + 1; + const bufferLength = pathLength + prefixLength + 1; - wchar[1024] absBuf; + wchar[1024] absBuf = void; auto absPath = bufferLength > absBuf.length ? new wchar[bufferLength] : absBuf[]; - absPath[0 .. prefix.length] = prefix[]; + absPath[0 .. prefixLength] = prefix[0 .. prefixLength]; const absPathRet = GetFullPathNameW(wpath, - cast(uint)(absPath.length - prefix.length), - &absPath[prefix.length], + cast(uint)(absPath.length - prefixLength), + &absPath[prefixLength], null /*filePartBuffer*/); - if (absPathRet == 0 || absPathRet > absPath.length - prefix.length) + if (absPathRet == 0 || absPathRet > absPath.length - prefixLength) { return F((wchar*).init); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dmd-2.082.0/test/README.md new/dmd-2.082.1/test/README.md --- old/dmd-2.082.0/test/README.md 2018-09-01 21:45:08.000000000 +0200 +++ new/dmd-2.082.1/test/README.md 2018-10-11 14:20:27.000000000 +0200 @@ -215,3 +215,6 @@ EXTRA_FILES directory for extra files of this test type, e.g. runnable/extra-files LIBEXT platform-specific extension for library files, e.g. .a or .lib + + SOEXT platform-specific extension for shared object files (aka. dynamic libraries), + e.g. .so, .dll or .dylib diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dmd-2.082.0/test/compilable/extra-files/test19266.d new/dmd-2.082.1/test/compilable/extra-files/test19266.d --- old/dmd-2.082.0/test/compilable/extra-files/test19266.d 1970-01-01 01:00:00.000000000 +0100 +++ new/dmd-2.082.1/test/compilable/extra-files/test19266.d 2018-10-11 14:20:27.000000000 +0200 @@ -0,0 +1,3 @@ +module test19266; + +pragma(msg, __FILE__); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dmd-2.082.0/test/compilable/issue19243.sh new/dmd-2.082.1/test/compilable/issue19243.sh --- old/dmd-2.082.0/test/compilable/issue19243.sh 1970-01-01 01:00:00.000000000 +0100 +++ new/dmd-2.082.1/test/compilable/issue19243.sh 2018-10-11 14:20:27.000000000 +0200 @@ -0,0 +1,50 @@ +#! /usr/bin/env bash + +# bypassing this test: +# - on windows +# - on FreeBSD 32 bits +# test fails looling for liborig.so; don't know why but shouldn't block fixing all other platforms +# - on Circle CI with no_pic. (need PIC to run the test) +if [[ $OS = *"win"* ]]; then exit 0; fi +if [[ $OS = *"freebsd"* ]] && [[ $MODEL = *"32"* ]]; then exit 0; fi +if [ ${PIC:-1} == "0" ]; then exit 0; fi + +TEST_DIR=${OUTPUT_BASE} +ORIG_D=$TEST_DIR/orig.d +ORIG_SO=$TEST_DIR/liborig${SOEXT} +OVERRIDE_D=$TEST_DIR/override.d +OVERRIDE_SO=$TEST_DIR/liboverride${SOEXT} +APP_D=$TEST_DIR/app.d + +mkdir -p $TEST_DIR + +cat << EOF | $DMD -m$MODEL -fPIC -shared -of$ORIG_SO - +import core.stdc.stdio; + +extern(C) int func() +{ + printf("liborig\n"); + return 1; +} +EOF + +cat << EOF | $DMD -m$MODEL -fPIC -shared -of$OVERRIDE_SO - +import core.stdc.stdio; + +extern(C) int func() +{ + printf("liboverride\n"); + return 2; +} +EOF + +cat << EOF | LD_LIBRARY_PATH=$TEST_DIR $DMD -m$MODEL -L-L$TEST_DIR -L$OVERRIDE_SO -run - +extern(C) int func(); + +pragma(lib, "orig"); + +void main() +{ + assert(func() == 2); +} +EOF diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dmd-2.082.0/test/compilable/test19266.sh new/dmd-2.082.1/test/compilable/test19266.sh --- old/dmd-2.082.0/test/compilable/test19266.sh 1970-01-01 01:00:00.000000000 +0100 +++ new/dmd-2.082.1/test/compilable/test19266.sh 2018-10-11 14:20:27.000000000 +0200 @@ -0,0 +1,6 @@ +#!/usr/bin/env bash + +if [ "${OS}" == "win32" -o "${OS}" == "win64" -o "${OS}" == "win32mscoff" ]; then + # break out of bash to get Windows paths + cmd //c $(echo $DMD | tr / \\) -c \\\\.\\%CD%\\compilable\\extra-files\\test19266.d -deps=nul: +fi diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dmd-2.082.0/test/compilable/test5227.d new/dmd-2.082.1/test/compilable/test5227.d --- old/dmd-2.082.0/test/compilable/test5227.d 2018-09-01 21:45:08.000000000 +0200 +++ new/dmd-2.082.1/test/compilable/test5227.d 2018-10-11 14:20:27.000000000 +0200 @@ -21,6 +21,8 @@ 6.00000L trunc() 5.00000L +exp() +244.692L expm1() 243.692L exp2() @@ -82,6 +84,11 @@ enum truncd = trunc(5.5 ); //pragma(msg, truncd); enum truncr = trunc(5.5L); pragma(msg, truncr); +pragma(msg, "exp()"); +enum expf = exp(5.5f); //pragma(msg, expf); +enum expd = exp(5.5 ); //pragma(msg, expd); +enum expr = exp(5.5L); pragma(msg, expr); + pragma(msg, "expm1()"); enum expm1f = expm1(5.5f); //pragma(msg, expm1f); enum expm1d = expm1(5.5 ); //pragma(msg, expm1d); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dmd-2.082.0/test/compilable/teststdint.d new/dmd-2.082.1/test/compilable/teststdint.d --- old/dmd-2.082.0/test/compilable/teststdint.d 2018-09-01 21:45:08.000000000 +0200 +++ new/dmd-2.082.1/test/compilable/teststdint.d 1970-01-01 01:00:00.000000000 +0100 @@ -1,262 +0,0 @@ - -import core.stdc.stdint; - -extern (C++): - -void int8(int8_t i) { } -void uint8(uint8_t i) { } - -void int16(int16_t i) { } -void uint16(uint16_t i) { } - -void int32(int32_t i) { } -void uint32(uint32_t i) { } - -void int64(int64_t i) { } -void uint64(uint64_t i) { } - -void int_least8(int_least8_t i) { } -void uint_least8(uint_least8_t i) { } - -void int_least16(int_least16_t i) { } -void uint_least16(uint_least16_t i) { } - -void int_least32(int_least32_t i) { } -void uint_least32(uint_least32_t i) { } - -void int_least64(int_least64_t i) { } -void uint_least64(uint_least64_t i) { } - -void int_fast8(int_fast8_t i) { } -void uint_fast8(uint_fast8_t i) { } - -void int_fast16(int_fast16_t i) { } -void uint_fast16(uint_fast16_t i) { } - -void int_fast32(int_fast32_t i) { } -void uint_fast32(uint_fast32_t i) { } - -void int_fast64(int_fast64_t i) { } -void uint_fast64(uint_fast64_t i) { } - -void intptr(intptr_t i) { } -void uintptr(uintptr_t i) { } - -void intmax(intmax_t i) { } -void uintmax(uintmax_t i) { } - -version (Win32) -{ - static assert(int8.mangleof == "?int8@@YAXC@Z"); - static assert(uint8.mangleof == "?uint8@@YAXE@Z"); - static assert(int16.mangleof == "?int16@@YAXF@Z"); - static assert(uint16.mangleof == "?uint16@@YAXG@Z"); - static assert(int32.mangleof == "?int32@@YAXJ@Z"); - static assert(uint32.mangleof == "?uint32@@YAXK@Z"); - static assert(int64.mangleof == "?int64@@YAX_J@Z"); - static assert(uint64.mangleof == "?uint64@@YAX_K@Z"); - - static assert(int_least8.mangleof == "?int_least8@@YAXC@Z"); - static assert(uint_least8.mangleof == "?uint_least8@@YAXE@Z"); - static assert(int_least16.mangleof == "?int_least16@@YAXF@Z"); - static assert(uint_least16.mangleof == "?uint_least16@@YAXG@Z"); - static assert(int_least32.mangleof == "?int_least32@@YAXJ@Z"); - static assert(uint_least32.mangleof == "?uint_least32@@YAXK@Z"); - static assert(int_least64.mangleof == "?int_least64@@YAX_J@Z"); - static assert(uint_least64.mangleof == "?uint_least64@@YAX_K@Z"); - - static assert(int_fast8.mangleof == "?int_fast8@@YAXC@Z"); - static assert(uint_fast8.mangleof == "?uint_fast8@@YAXE@Z"); - static assert(int_fast16.mangleof == "?int_fast16@@YAXH@Z"); - static assert(uint_fast16.mangleof == "?uint_fast16@@YAXI@Z"); - static assert(int_fast32.mangleof == "?int_fast32@@YAXJ@Z"); - static assert(uint_fast32.mangleof == "?uint_fast32@@YAXK@Z"); - static assert(int_fast64.mangleof == "?int_fast64@@YAX_J@Z"); - static assert(uint_fast64.mangleof == "?uint_fast64@@YAX_K@Z"); - - static assert(intptr.mangleof == "?intptr@@YAXH@Z"); - static assert(uintptr.mangleof == "?uintptr@@YAXI@Z"); - static assert(intmax.mangleof == "?intmax@@YAX_J@Z"); - static assert(uintmax.mangleof == "?uintmax@@YAX_K@Z"); -} -else version (Win64) -{ - static assert(int8.mangleof == "?int8@@YAXC@Z"); - static assert(uint8.mangleof == "?uint8@@YAXE@Z"); - static assert(int16.mangleof == "?int16@@YAXF@Z"); - static assert(uint16.mangleof == "?uint16@@YAXG@Z"); - static assert(int32.mangleof == "?int32@@YAXH@Z"); - static assert(uint32.mangleof == "?uint32@@YAXI@Z"); - static assert(int64.mangleof == "?int64@@YAX_J@Z"); - static assert(uint64.mangleof == "?uint64@@YAX_K@Z"); - - static assert(int_least8.mangleof == "?int_least8@@YAXC@Z"); - static assert(uint_least8.mangleof == "?uint_least8@@YAXE@Z"); - static assert(int_least16.mangleof == "?int_least16@@YAXF@Z"); - static assert(uint_least16.mangleof == "?uint_least16@@YAXG@Z"); - static assert(int_least32.mangleof == "?int_least32@@YAXH@Z"); - static assert(uint_least32.mangleof == "?uint_least32@@YAXI@Z"); - static assert(int_least64.mangleof == "?int_least64@@YAX_J@Z"); - static assert(uint_least64.mangleof == "?uint_least64@@YAX_K@Z"); - - static assert(int_fast8.mangleof == "?int_fast8@@YAXD@Z"); // char - static assert(uint_fast8.mangleof == "?uint_fast8@@YAXE@Z"); // unsigned char - static assert(int_fast16.mangleof == "?int_fast16@@YAXH@Z"); // int - static assert(uint_fast16.mangleof == "?uint_fast16@@YAXI@Z"); // unsigned int - static assert(int_fast32.mangleof == "?int_fast32@@YAXH@Z"); // int - static assert(uint_fast32.mangleof == "?uint_fast32@@YAXI@Z"); // unsigned int - static assert(int_fast64.mangleof == "?int_fast64@@YAX_J@Z"); // _Longlong - static assert(uint_fast64.mangleof == "?uint_fast64@@YAX_K@Z"); // _ULonglong - - static assert(intptr.mangleof == "?intptr@@YAX_J@Z"); - static assert(uintptr.mangleof == "?uintptr@@YAX_K@Z"); - static assert(intmax.mangleof == "?intmax@@YAX_J@Z"); - static assert(uintmax.mangleof == "?uintmax@@YAX_K@Z"); -} -else version (OSX) -{ - version (D_LP64) - { - static assert(int8.mangleof == "_Z4int8a"); - static assert(uint8.mangleof == "_Z5uint8h"); - static assert(int16.mangleof == "_Z5int16s"); - static assert(uint16.mangleof == "_Z6uint16t"); - static assert(int32.mangleof == "_Z5int32i"); - static assert(uint32.mangleof == "_Z6uint32j"); - static assert(int64.mangleof == "_Z5int64x"); - static assert(uint64.mangleof == "_Z6uint64y"); - - static assert(int_least8.mangleof == "_Z10int_least8a"); - static assert(uint_least8.mangleof == "_Z11uint_least8h"); - static assert(int_least16.mangleof == "_Z11int_least16s"); - static assert(uint_least16.mangleof == "_Z12uint_least16t"); - static assert(int_least32.mangleof == "_Z11int_least32i"); - static assert(uint_least32.mangleof == "_Z12uint_least32j"); - static assert(int_least64.mangleof == "_Z11int_least64x"); - static assert(uint_least64.mangleof == "_Z12uint_least64y"); - - static assert(int_fast8.mangleof == "_Z9int_fast8a"); - static assert(uint_fast8.mangleof == "_Z10uint_fast8h"); - static assert(int_fast16.mangleof == "_Z10int_fast16s"); - static assert(uint_fast16.mangleof == "_Z11uint_fast16t"); - static assert(int_fast32.mangleof == "_Z10int_fast32i"); - static assert(uint_fast32.mangleof == "_Z11uint_fast32j"); - static assert(int_fast64.mangleof == "_Z10int_fast64x"); - static assert(uint_fast64.mangleof == "_Z11uint_fast64y"); - - static assert(intptr.mangleof == "_Z6intptrl"); - static assert(uintptr.mangleof == "_Z7uintptrm"); - static assert(intmax.mangleof == "_Z6intmaxl"); - static assert(uintmax.mangleof == "_Z7uintmaxm"); - } - else - { - static assert(int8.mangleof == "_Z4int8a"); - static assert(uint8.mangleof == "_Z5uint8h"); - static assert(int16.mangleof == "_Z5int16s"); - static assert(uint16.mangleof == "_Z6uint16t"); - static assert(int32.mangleof == "_Z5int32i"); - static assert(uint32.mangleof == "_Z6uint32j"); - static assert(int64.mangleof == "_Z5int64x"); - static assert(uint64.mangleof == "_Z6uint64y"); - - static assert(int_least8.mangleof == "_Z10int_least8a"); - static assert(uint_least8.mangleof == "_Z11uint_least8h"); - static assert(int_least16.mangleof == "_Z11int_least16s"); - static assert(uint_least16.mangleof == "_Z12uint_least16t"); - static assert(int_least32.mangleof == "_Z11int_least32i"); - static assert(uint_least32.mangleof == "_Z12uint_least32j"); - static assert(int_least64.mangleof == "_Z11int_least64x"); - static assert(uint_least64.mangleof == "_Z12uint_least64y"); - - static assert(int_fast8.mangleof == "_Z9int_fast8a"); - static assert(uint_fast8.mangleof == "_Z10uint_fast8h"); - static assert(int_fast16.mangleof == "_Z10int_fast16s"); - static assert(uint_fast16.mangleof == "_Z11uint_fast16t"); - static assert(int_fast32.mangleof == "_Z10int_fast32i"); - static assert(uint_fast32.mangleof == "_Z11uint_fast32j"); - static assert(int_fast64.mangleof == "_Z10int_fast64x"); - static assert(uint_fast64.mangleof == "_Z11uint_fast64y"); - - static assert(intptr.mangleof == "_Z6intptrl"); - static assert(uintptr.mangleof == "_Z7uintptrm"); - static assert(intmax.mangleof == "_Z6intmaxx"); - static assert(uintmax.mangleof == "_Z7uintmaxy"); - } -} -else version (Posix) -{ - version (D_LP64) - { - static assert(int8.mangleof == "_Z4int8a"); - static assert(uint8.mangleof == "_Z5uint8h"); - static assert(int16.mangleof == "_Z5int16s"); - static assert(uint16.mangleof == "_Z6uint16t"); - static assert(int32.mangleof == "_Z5int32i"); - static assert(uint32.mangleof == "_Z6uint32j"); - static assert(int64.mangleof == "_Z5int64l"); - static assert(uint64.mangleof == "_Z6uint64m"); - - static assert(int_least8.mangleof == "_Z10int_least8a"); - static assert(uint_least8.mangleof == "_Z11uint_least8h"); - static assert(int_least16.mangleof == "_Z11int_least16s"); - static assert(uint_least16.mangleof == "_Z12uint_least16t"); - static assert(int_least32.mangleof == "_Z11int_least32i"); - static assert(uint_least32.mangleof == "_Z12uint_least32j"); - static assert(int_least64.mangleof == "_Z11int_least64l"); - static assert(uint_least64.mangleof == "_Z12uint_least64m"); - - static assert(int_fast8.mangleof == "_Z9int_fast8a"); - static assert(uint_fast8.mangleof == "_Z10uint_fast8h"); - static assert(int_fast16.mangleof == "_Z10int_fast16l"); - static assert(uint_fast16.mangleof == "_Z11uint_fast16m"); - static assert(int_fast32.mangleof == "_Z10int_fast32l"); - static assert(uint_fast32.mangleof == "_Z11uint_fast32m"); - static assert(int_fast64.mangleof == "_Z10int_fast64l"); - static assert(uint_fast64.mangleof == "_Z11uint_fast64m"); - - static assert(intptr.mangleof == "_Z6intptrl"); - static assert(uintptr.mangleof == "_Z7uintptrm"); - static assert(intmax.mangleof == "_Z6intmaxl"); - static assert(uintmax.mangleof == "_Z7uintmaxm"); - } - else - { - static assert(int8.mangleof == "_Z4int8a"); - static assert(uint8.mangleof == "_Z5uint8h"); - static assert(int16.mangleof == "_Z5int16s"); - static assert(uint16.mangleof == "_Z6uint16t"); - static assert(int32.mangleof == "_Z5int32i"); - static assert(uint32.mangleof == "_Z6uint32j"); - static assert(int64.mangleof == "_Z5int64x"); - static assert(uint64.mangleof == "_Z6uint64y"); - - static assert(int_least8.mangleof == "_Z10int_least8a"); - static assert(uint_least8.mangleof == "_Z11uint_least8h"); - static assert(int_least16.mangleof == "_Z11int_least16s"); - static assert(uint_least16.mangleof == "_Z12uint_least16t"); - static assert(int_least32.mangleof == "_Z11int_least32i"); - static assert(uint_least32.mangleof == "_Z12uint_least32j"); - static assert(int_least64.mangleof == "_Z11int_least64x"); - static assert(uint_least64.mangleof == "_Z12uint_least64y"); - - static assert(int_fast8.mangleof == "_Z9int_fast8a"); - static assert(uint_fast8.mangleof == "_Z10uint_fast8h"); - static assert(int_fast16.mangleof == "_Z10int_fast16i"); - static assert(uint_fast16.mangleof == "_Z11uint_fast16j"); - static assert(int_fast32.mangleof == "_Z10int_fast32i"); - static assert(uint_fast32.mangleof == "_Z11uint_fast32j"); - static assert(int_fast64.mangleof == "_Z10int_fast64x"); - static assert(uint_fast64.mangleof == "_Z11uint_fast64y"); - - static assert(intptr.mangleof == "_Z6intptri"); - static assert(uintptr.mangleof == "_Z7uintptrj"); - static assert(intmax.mangleof == "_Z6intmaxx"); - static assert(uintmax.mangleof == "_Z7uintmaxy"); - } -} -else -{ - static assert(0, "unsupported version"); -} - diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dmd-2.082.0/test/runnable/extra-files/stdint.cpp new/dmd-2.082.1/test/runnable/extra-files/stdint.cpp --- old/dmd-2.082.0/test/runnable/extra-files/stdint.cpp 1970-01-01 01:00:00.000000000 +0100 +++ new/dmd-2.082.1/test/runnable/extra-files/stdint.cpp 2018-10-11 14:20:27.000000000 +0200 @@ -0,0 +1,8 @@ +#include <stdint.h> + +int testCppI8Mangle (int8_t, uint8_t, int_least8_t, uint_least8_t, int_fast8_t, uint_fast8_t) { return 1; } +int testCppI16Mangle(int16_t, uint16_t, int_least16_t, uint_least16_t, int_fast16_t, uint_fast16_t) { return 2; } +int testCppI32Mangle(int32_t, uint32_t, int_least32_t, uint_least32_t, int_fast32_t, uint_fast32_t) { return 3; } +int testCppI64Mangle(int64_t, uint64_t, int_least64_t, uint_least64_t, int_fast64_t, uint_fast64_t) { return 4; } +int testCppIntPtrMangle(intptr_t, uintptr_t) { return 5; } +int testCppIntMaxMangle(intmax_t, uintmax_t) { return 6; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dmd-2.082.0/test/runnable/stdint.d new/dmd-2.082.1/test/runnable/stdint.d --- old/dmd-2.082.0/test/runnable/stdint.d 1970-01-01 01:00:00.000000000 +0100 +++ new/dmd-2.082.1/test/runnable/stdint.d 2018-10-11 14:20:27.000000000 +0200 @@ -0,0 +1,24 @@ +// EXTRA_CPP_SOURCES: stdint.cpp + +module stdint_test; + +import core.stdc.stdint; + +extern(C++): + +int testCppI8Mangle (int8_t, uint8_t, int_least8_t, uint_least8_t, int_fast8_t, uint_fast8_t); +int testCppI16Mangle(int16_t, uint16_t, int_least16_t, uint_least16_t, int_fast16_t, uint_fast16_t); +int testCppI32Mangle(int32_t, uint32_t, int_least32_t, uint_least32_t, int_fast32_t, uint_fast32_t); +int testCppI64Mangle(int64_t, uint64_t, int_least64_t, uint_least64_t, int_fast64_t, uint_fast64_t); +int testCppIntPtrMangle(intptr_t, uintptr_t); +int testCppIntMaxMangle(intmax_t, uintmax_t); + +void main() +{ + assert(testCppI8Mangle (1, 2, 3, 4, 5, 6) == 1); + assert(testCppI16Mangle(1, 2, 3, 4, 5, 6) == 2); + assert(testCppI32Mangle(1, 2, 3, 4, 5, 6) == 3); + assert(testCppI64Mangle(1, 2, 3, 4, 5, 6) == 4); + assert(testCppIntPtrMangle(1, 2) == 5); + assert(testCppIntMaxMangle(1, 2) == 6); +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dmd-2.082.0/test/tools/exported_vars.sh new/dmd-2.082.1/test/tools/exported_vars.sh --- old/dmd-2.082.0/test/tools/exported_vars.sh 2018-09-01 21:45:08.000000000 +0200 +++ new/dmd-2.082.1/test/tools/exported_vars.sh 2018-10-11 14:20:27.000000000 +0200 @@ -13,6 +13,14 @@ export LIBEXT=.a fi +if [[ "$OS" == "win"* ]]; then + export SOEXT=.dll +elif [[ "$OS" = "osx" ]]; then + export SOEXT=.dylib +else + export SOEXT=.so +fi + # Default to DigitalMars C++ on Win32 if [ "$OS" == "win32" ] && [ -z "${CC+set}" ] ; then CC="dmc" ++++++ druntime-2.082.0.tar.gz -> druntime-2.082.1.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/druntime-2.082.0/benchmark/gcbench/conmsg.d new/druntime-2.082.1/benchmark/gcbench/conmsg.d --- old/druntime-2.082.0/benchmark/gcbench/conmsg.d 2018-08-29 11:45:01.000000000 +0200 +++ new/druntime-2.082.1/benchmark/gcbench/conmsg.d 2018-09-28 13:07:12.000000000 +0200 @@ -7,7 +7,7 @@ */ import std.algorithm, std.concurrency, std.conv, std.file, std.json, std.range; -JSONValue buildVal(in dchar[] word) +JSONValue buildVal(in dchar[] word) pure { JSONValue[string] res; res["word"] = word.to!string; @@ -35,9 +35,9 @@ void serialize(in JSONValue val, ref ubyte[] buf) { - with (JSON_TYPE) switch (val.type) + with (JSONType) switch (val.type) { - case OBJECT: + case object: foreach (k, v; val.object) { buf ~= cast(ubyte[])k; @@ -45,17 +45,17 @@ } break; - case ARRAY: + case array: foreach (v; val.array) serialize(v, buf); break; - case UINTEGER: + case uinteger: ulong v = val.uinteger; buf ~= (cast(ubyte*)&v)[0 .. v.sizeof]; break; - case STRING: + case string: buf ~= cast(ubyte[])val.str; break; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/druntime-2.082.0/changelog/exceptions-opt.dd new/druntime-2.082.1/changelog/exceptions-opt.dd --- old/druntime-2.082.0/changelog/exceptions-opt.dd 2018-08-29 11:45:01.000000000 +0200 +++ new/druntime-2.082.1/changelog/exceptions-opt.dd 1970-01-01 01:00:00.000000000 +0100 @@ -1,35 +0,0 @@ -Exception trapping can now be disabled via `--DRT-trapExceptions=0` - -Previously it was only possible to disable the trapping of exception by setting -the global variable `rt_trapExceptions` to `false`. -Now you can, for example, immediately open `gdb` at the uncaught exception: - -$(CONSOLE -> gdb -ex run --args <my-program> --DRT-trapExceptions=0 -[Thread debugging using libthread_db enabled] -Using host libthread_db library "/usr/lib/libthread_db.so.1". -uncaught exception -object.Exception@src/rt_trap_exceptions_drt.d(4): foo -$(NDASH)$(NDASH)$(NDASH)$(NDASH)$(NDASH)$(NDASH)$(NDASH)$(NDASH)$(NDASH)$(NDASH) -src/rt_trap_exceptions_drt.d:4 void rt_trap_exceptions_drt.test() [0x55591026] -src/rt_trap_exceptions_drt.d:9 _Dmain [0x55591058] -$(P) -Program received signal SIGABRT, Aborted. -0x00007ffff6e7b86b in raise () from /usr/lib/libc.so.6 -(gdb) bt full -#0 0x00007ffff6e7b86b in raise () from /usr/lib/libc.so.6 -No symbol table info available. -#1 0x00007ffff6e6640e in abort () from /usr/lib/libc.so.6 -No symbol table info available. -#2 0x00005555555918cc in _d_throwdwarf (o=0x7ffff7ea4000) at src/rt/dwarfeh.d:233 - eh = 0x7ffff7fa4740 - refcount = 0 - r = 5 -#3 0x0000555555591027 in rt_trap_exceptions_drt.test() () at ../../src/object.d:2695 - innerLocal = 20 -#4 0x0000555555591059 in D main (args=...) at src/rt_trap_exceptions_drt.d:9 - myLocal = "bar" -) - -$(LINK2 http://arsdnet.net/this-week-in-d/2016-aug-07.html, This Week in D) for -an in-depth explanation of `rt_trapExceptions` diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/druntime-2.082.0/changelog/require_update.dd new/druntime-2.082.1/changelog/require_update.dd --- old/druntime-2.082.0/changelog/require_update.dd 2018-08-29 11:45:01.000000000 +0200 +++ new/druntime-2.082.1/changelog/require_update.dd 1970-01-01 01:00:00.000000000 +0100 @@ -1,36 +0,0 @@ -Additional functions for associative arrays - -The $(D require) function provides a means to construct a new value when the key -is not present. - ---------- -class C{} -C[string] aa; - -auto a = aa.require("a", new C); // lookup "a", construct if not present ---------- - -The $(D update) function allows different operations to be performed depending -on whether a value already exists or needs to be constructed. - ---------- -class C{} -C[string] aa; - -C older; -C newer; -aa.update("a", -{ - newer = new C; - return newer; -}, -(ref C c) -{ - older = c; - newer = new C; - return newer; -}); ---------- - -The functions avoid the need to perform multiple key lookups. Further details -are available in the $(LINK2 $(ROOT_DIR)spec/hash-map.html, spec.) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/druntime-2.082.0/changelog/typeinfo-gethash.dd new/druntime-2.082.1/changelog/typeinfo-gethash.dd --- old/druntime-2.082.0/changelog/typeinfo-gethash.dd 2018-08-29 11:45:01.000000000 +0200 +++ new/druntime-2.082.1/changelog/typeinfo-gethash.dd 1970-01-01 01:00:00.000000000 +0100 @@ -1,7 +0,0 @@ -`TypeInfo.getHash` now uses `core.internal.hash.hashOf` functions for hash computing - -Now `typeid(typeof(var)).getHash(&var)` should be always equal `hashOf(val)`. -hashOf uses MurmurHash3 algorithm for bitwise hashing, including string hashing. -Old implementation used polynomial hash for string hashing, which often provided -lexicographical order of strings in associative array. However AA doesn't guarantee -some specific order of elements, thus tests which rely on it should be changed. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/druntime-2.082.0/changelog/utsname_version.dd new/druntime-2.082.1/changelog/utsname_version.dd --- old/druntime-2.082.0/changelog/utsname_version.dd 2018-08-29 11:45:01.000000000 +0200 +++ new/druntime-2.082.1/changelog/utsname_version.dd 1970-01-01 01:00:00.000000000 +0100 @@ -1,10 +0,0 @@ -core.sys.posix.utsname.update renamed to version_ - -The struct that $(D uname) returns - $(D utsname) - has the field $(D version) -in C. The D definition of the struct cannot match that, because $(D version) is -a keyword in D. So, it's been called $(D update), which is not an obvious -choice. It is more in line with current naming policies (and more in line with -the name in C) for it to be called $(D version_), since that's the closest that -we can get to $(D version) in D. So, $(D update) has now been renamed to -$(D version_), and $(D update) is an alias of $(D version_) which will be -deprecated in a future release. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/druntime-2.082.0/src/core/stdc/stdint.d new/druntime-2.082.1/src/core/stdc/stdint.d --- old/druntime-2.082.0/src/core/stdc/stdint.d 2018-08-29 11:45:01.000000000 +0200 +++ new/druntime-2.082.1/src/core/stdc/stdint.d 2018-09-28 13:07:12.000000000 +0200 @@ -35,84 +35,92 @@ alias uint128_t = ucent; /// } -version (Win32) -{ - alias int8_t = byte; /// - alias int16_t = short; /// - alias uint8_t = ubyte; /// - alias uint16_t = ushort; /// - alias int32_t = cpp_long; /// - alias uint32_t = cpp_ulong; /// - alias int64_t = long; /// - alias uint64_t = ulong; /// - - alias int_least8_t = byte; /// - alias uint_least8_t = ubyte; /// - alias int_least16_t = short; /// - alias uint_least16_t = ushort; /// - alias int_least32_t = cpp_long; /// - alias uint_least32_t = cpp_ulong; /// - alias int_least64_t = long; /// - alias uint_least64_t = ulong; /// - - alias int_fast8_t = byte; /// - alias uint_fast8_t = ubyte; /// - alias int_fast16_t = int; /// - alias uint_fast16_t = uint; /// - alias int_fast32_t = cpp_long; /// - alias uint_fast32_t = cpp_ulong; /// - alias int_fast64_t = long; /// - alias uint_fast64_t = ulong; /// - - alias intptr_t = int; /// - alias uintptr_t = uint; /// - alias intmax_t = long; /// - alias uintmax_t = ulong; /// -} -else version (Win64) +version (Windows) { alias int8_t = byte; /// alias int16_t = short; /// alias uint8_t = ubyte; /// alias uint16_t = ushort; /// - alias int32_t = int; /// - alias uint32_t = uint; /// + version (CRuntime_DigitalMars) + { + alias int32_t = cpp_long; /// + alias uint32_t = cpp_ulong; /// + } + else + { + alias int32_t = int; /// + alias uint32_t = uint; /// + } alias int64_t = long; /// alias uint64_t = ulong; /// - alias int_least8_t = byte; /// - alias uint_least8_t = ubyte; /// - alias int_least16_t = short; /// - alias uint_least16_t = ushort; /// - alias int_least32_t = int; /// - alias uint_least32_t = uint; /// - alias int_least64_t = long; /// - alias uint_least64_t = ulong; /// - - alias int_fast8_t = char; /// - alias uint_fast8_t = ubyte; /// - alias int_fast16_t = int; /// - alias uint_fast16_t = uint; /// - alias int_fast32_t = int; /// - alias uint_fast32_t = uint; /// - alias int_fast64_t = long; /// - alias uint_fast64_t = ulong; /// - - alias intptr_t = long; /// - alias uintptr_t = ulong; /// - alias intmax_t = long; /// - alias uintmax_t = ulong; /// + alias int_least8_t = byte; /// + alias uint_least8_t = ubyte; /// + alias int_least16_t = short; /// + alias uint_least16_t = ushort; /// + alias int_least32_t = int32_t; /// + alias uint_least32_t = uint32_t; /// + alias int_least64_t = long; /// + alias uint_least64_t = ulong; /// + + alias int_fast8_t = byte; /// + alias uint_fast8_t = ubyte; /// + alias int_fast16_t = int; /// + alias uint_fast16_t = uint; /// + alias int_fast32_t = int32_t; /// + alias uint_fast32_t = uint32_t; /// + alias int_fast64_t = long; /// + alias uint_fast64_t = ulong; /// + + alias intptr_t = ptrdiff_t; /// + alias uintptr_t = size_t; /// + alias intmax_t = long; /// + alias uintmax_t = ulong; /// } else version (OSX) { + alias int8_t = byte; /// + alias int16_t = short; /// + alias uint8_t = ubyte; /// + alias uint16_t = ushort; /// + alias int32_t = int; /// + alias uint32_t = uint; /// + alias int64_t = cpp_longlong; /// + alias uint64_t = cpp_ulonglong; /// + + alias int_least8_t = byte; /// + alias uint_least8_t = ubyte; /// + alias int_least16_t = short; /// + alias uint_least16_t = ushort; /// + alias int_least32_t = int; /// + alias uint_least32_t = uint; /// + alias int_least64_t = int64_t; /// + alias uint_least64_t = uint64_t; /// + + alias int_fast8_t = byte; /// + alias uint_fast8_t = ubyte; /// + alias int_fast16_t = short; /// + alias uint_fast16_t = ushort; /// + alias int_fast32_t = int; /// + alias uint_fast32_t = uint; /// + alias int_fast64_t = int64_t; /// + alias uint_fast64_t = uint64_t; /// + + alias intptr_t = cpp_long; /// + alias uintptr_t = cpp_ulong; /// + alias intmax_t = long; /// + alias uintmax_t = ulong; /// +} +else version (Posix) +{ alias int8_t = byte; /// alias int16_t = short; /// alias uint8_t = ubyte; /// alias uint16_t = ushort; /// alias int32_t = int; /// alias uint32_t = uint; /// - alias int64_t = cpp_longlong; /// - alias uint64_t = cpp_ulonglong; /// + alias int64_t = long; /// + alias uint64_t = ulong; /// alias int_least8_t = byte; /// alias uint_least8_t = ubyte; /// @@ -120,101 +128,34 @@ alias uint_least16_t = ushort; /// alias int_least32_t = int; /// alias uint_least32_t = uint; /// - alias int_least64_t = int64_t; /// - alias uint_least64_t = uint64_t; /// - - alias int_fast8_t = byte; /// - alias uint_fast8_t = ubyte; /// - alias int_fast16_t = short; /// - alias uint_fast16_t = ushort; /// - alias int_fast32_t = int; /// - alias uint_fast32_t = uint; /// - alias int_fast64_t = int64_t; /// - alias uint_fast64_t = uint64_t; /// + alias int_least64_t = long; /// + alias uint_least64_t = ulong; /// - alias intptr_t = cpp_long; /// - alias uintptr_t = cpp_ulong; /// - version (D_LP64) + version (FreeBSD) { - alias intmax_t = cpp_long; /// - alias uintmax_t = cpp_ulong; /// + alias int_fast8_t = int; /// + alias uint_fast8_t = uint; /// + alias int_fast16_t = int; /// + alias uint_fast16_t = uint; /// + alias int_fast32_t = int; /// + alias uint_fast32_t = uint; /// } else { - alias intmax_t = long; /// - alias uintmax_t = ulong; /// - } -} -else version (Posix) -{ - version (D_LP64) - { - alias int8_t = byte; /// - alias int16_t = short; /// - alias uint8_t = ubyte; /// - alias uint16_t = ushort; /// - alias int32_t = int; /// - alias uint32_t = uint; /// - alias int64_t = cpp_long; /// - alias uint64_t = cpp_ulong; /// - - alias int_least8_t = byte; /// - alias uint_least8_t = ubyte; /// - alias int_least16_t = short; /// - alias uint_least16_t = ushort; /// - alias int_least32_t = int; /// - alias uint_least32_t = uint; /// - alias int_least64_t = cpp_long; /// - alias uint_least64_t = cpp_ulong; /// - alias int_fast8_t = byte; /// alias uint_fast8_t = ubyte; /// - alias int_fast16_t = cpp_long; /// - alias uint_fast16_t = cpp_ulong; /// - alias int_fast32_t = cpp_long; /// - alias uint_fast32_t = cpp_ulong; /// - alias int_fast64_t = cpp_long; /// - alias uint_fast64_t = cpp_ulong; /// - - alias intptr_t = cpp_long; /// - alias uintptr_t = cpp_ulong; /// - alias intmax_t = cpp_long; /// - alias uintmax_t = cpp_ulong; /// - } - else - { - alias int8_t = byte; /// - alias int16_t = short; /// - alias uint8_t = ubyte; /// - alias uint16_t = ushort; /// - alias int32_t = int; /// - alias uint32_t = uint; /// - alias int64_t = long; /// - alias uint64_t = ulong; /// - - alias int_least8_t = byte; /// - alias uint_least8_t = ubyte; /// - alias int_least16_t = short; /// - alias uint_least16_t = ushort; /// - alias int_least32_t = int; /// - alias uint_least32_t = uint; /// - alias int_least64_t = long; /// - alias uint_least64_t = ulong; /// - - alias int_fast8_t = byte; /// - alias uint_fast8_t = ubyte; /// - alias int_fast16_t = int; /// - alias uint_fast16_t = uint; /// - alias int_fast32_t = int; /// - alias uint_fast32_t = uint; /// - alias int_fast64_t = long; /// - alias uint_fast64_t = ulong; /// - - alias intptr_t = int ; /// - alias uintptr_t = uint; /// - alias intmax_t = long; /// - alias uintmax_t = ulong; /// + alias int_fast16_t = ptrdiff_t; /// + alias uint_fast16_t = size_t; /// + alias int_fast32_t = ptrdiff_t; /// + alias uint_fast32_t = size_t; /// } + alias int_fast64_t = long; /// + alias uint_fast64_t = ulong; /// + + alias intptr_t = ptrdiff_t; /// + alias uintptr_t = size_t; /// + alias intmax_t = long; /// + alias uintmax_t = ulong; /// } else { ++++++ phobos-2.082.0.tar.gz -> phobos-2.082.1.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/phobos-2.082.0/changelog/math_float_double_implementations.dd new/phobos-2.082.1/changelog/math_float_double_implementations.dd --- old/phobos-2.082.0/changelog/math_float_double_implementations.dd 2018-08-27 08:35:33.000000000 +0200 +++ new/phobos-2.082.1/changelog/math_float_double_implementations.dd 1970-01-01 01:00:00.000000000 +0100 @@ -1,15 +0,0 @@ -Single- and double-precision implementations for (a)tan and exp function families - -The `float` and `double` overloads of -$(REF atan, std, math), $(REF atan2, std, math), $(REF tan, std, math), -$(REF exp, std, math), $(REF expm1, std, math) and $(REF exp2, std, math) -previously forwarded to the `real` implementation (inline assembly) and -now got proper 'software' implementations in the corresponding precision. - -While this may result in a slowdown in some cases for DMD (especially for -`exp()` and `exp2()`), the overall speed-up factor for LDC is > 3, for -both `double` and `float`. - -This also implies less precise results, especially in single-precision, -so if your code depended on more accurate results via 80-bit intermediate -precision, you'll have to cast the argument(s) explicitly now. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/phobos-2.082.0/changelog/std-algorithm-iteration-each-early-stopping.dd new/phobos-2.082.1/changelog/std-algorithm-iteration-each-early-stopping.dd --- old/phobos-2.082.0/changelog/std-algorithm-iteration-each-early-stopping.dd 2018-08-27 08:35:33.000000000 +0200 +++ new/phobos-2.082.1/changelog/std-algorithm-iteration-each-early-stopping.dd 1970-01-01 01:00:00.000000000 +0100 @@ -1,13 +0,0 @@ -`std.algorithm.iteration.each` is now capable of early-stopping - -$(REF each, std,algorithm,iteration) is now capable of exiting early. -When a `No.each` $(REF Flag, std,typecons) is returned from the function that -is called by `each`, the iteration will be aborted early. -Analogously, returning `Yes.each` will continue the iteration. -For example: - ---- -auto arr = [10, 20, 30]; -arr.each!((n) { arr ~= n; return (n == 20) ? No.each : Yes.each; }); // aborts after the second iteration -assert(arr == [10, 20, 30, 10, 20]); ---- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/phobos-2.082.0/changelog/std-algorithm-iteration-joiner.dd new/phobos-2.082.1/changelog/std-algorithm-iteration-joiner.dd --- old/phobos-2.082.0/changelog/std-algorithm-iteration-joiner.dd 2018-08-27 08:35:33.000000000 +0200 +++ new/phobos-2.082.1/changelog/std-algorithm-iteration-joiner.dd 1970-01-01 01:00:00.000000000 +0100 @@ -1,25 +0,0 @@ -`std.algorithm.iteration.joiner` can now be used for bidirectional ranges - -$(REF joiner, std,algorithm,iteration) can now be requested to be a bidirectional range. - ---- -import std.algorithm.iteration : joiner; -import std.range : retro; -[[1, 2], [3, 4]].joiner.retro; // [4, 3, 2, 1] ---- - -A more complex example of inserting a format delimiter fully lazily: - ---- -import std.algorithm.comparison : equal; -import std.range : chain, cycle, iota, only, retro, take, zip; -import std.format : format; - -static immutable number = "12345678"; -static immutable delimiter = ","; -auto formatted = number.retro - .zip(3.iota.cycle.take(number.length)) - .map!(z => chain(z[0].only, z[1] == 2 ? delimiter : null)) - .joiner - .retro; // "12,345,678" ---- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/phobos-2.082.0/changelog/std-algorithm-searching-skipOver.dd new/phobos-2.082.1/changelog/std-algorithm-searching-skipOver.dd --- old/phobos-2.082.0/changelog/std-algorithm-searching-skipOver.dd 2018-08-27 08:35:33.000000000 +0200 +++ new/phobos-2.082.1/changelog/std-algorithm-searching-skipOver.dd 1970-01-01 01:00:00.000000000 +0100 @@ -1,13 +0,0 @@ -`std.algorithm.searching.skipOver` can now handle variadic arguments - -$(REF skipOver, std,algorithm) which allows to move over a needle if it matches -now accepts variadic arguments for needles to skip over: - ---- -auto s = "DLang.rocks"; -assert(!s.skipOver("dlang", "DLF", "DLang ")); -assert(s == "DLang.rocks"); - -assert(s.skipOver("dlang", "DLANG", "DLF", "D", "DL", "DLanp")); -assert(s == "ang.rocks"); ---- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/phobos-2.082.0/changelog/std-array-asStatic.dd new/phobos-2.082.1/changelog/std-array-asStatic.dd --- old/phobos-2.082.0/changelog/std-array-asStatic.dd 2018-08-27 08:35:33.000000000 +0200 +++ new/phobos-2.082.1/changelog/std-array-asStatic.dd 1970-01-01 01:00:00.000000000 +0100 @@ -1,23 +0,0 @@ -Added `staticArray` to construct a static array from array / input range. Includes a length-inferring compile-time variant. - -The type of elements can be specified implicitly so that $(D [1, 2].staticArray) results in `int[2]`, -or explicitly, e.g. $(D [1, 2].staticArray!float) returns `float[2]`. -When `a` is a range whose length is not known at compile time, the number of elements must be given as template argument -(e.g. `myrange.staticArray!2`). -Size and type can be combined, if the source range elements are implicitly -convertible to the requested element type (eg: `2.iota.staticArray!(long[2])`). -When the range `a` is known at compile time, it can also be specified as a -template argument to avoid having to specify the number of elements -(e.g.: `staticArray!(2.iota)` or `staticArray!(double, 2.iota)`). - ---- -import std.range : iota; - -auto input = 3.iota; -auto a = input.staticArray!2; -static assert(is(typeof(a) == int[2])); -assert(a == [0, 1]); -auto b = input.staticArray!(long[4]); -static assert(is(typeof(b) == long[4])); -assert(b == [0, 1, 2, 0]); ---- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/phobos-2.082.0/changelog/std-datetime-timezone-remove.dd new/phobos-2.082.1/changelog/std-datetime-timezone-remove.dd --- old/phobos-2.082.0/changelog/std-datetime-timezone-remove.dd 2018-08-27 08:35:33.000000000 +0200 +++ new/phobos-2.082.1/changelog/std-datetime-timezone-remove.dd 1970-01-01 01:00:00.000000000 +0100 @@ -1,21 +0,0 @@ -Deprecated functions for getting the timezone have been removed. - -Due to the fact that Microsoft changes its timezone definitions too frequently -to maintain the conversion between the IANA TZ Database names and the names that -Microsoft uses in the standard library, several functions in -std.datetime.timezone related to getting the time zone independently of the -host OS were previously deprecated: $(D TimeZone.getTimeZone), -$(D TimeZone.getInstalledTZNames), $(D tzDatabaseNameToWindowsTZName), and -$(D windowsTZNameToTZDatabaseName). These functions have now been fully removed. - -Instead of $(D TimeZone.getTimeZone), -$(REF PosixTimeZone.getTimeZone, std, datetime, timezone) and -$(REF WindowsTimeZone.getTimeZone, std, datetime, timezone) should be used -directly. Instead of $(D Timezone.getInstalledTimeZones), -$(REF PosixTimeZone.getInstalledTZNames, std, datetime, timezone) and -$(REF WindowsTimeZone.getInstalledTZNames, std, datetime, timezone) should be -used directly. And any programs looking to convert between the TZ Database -names and the Windows names can use -$(REF parseTZConversions, std, datetime, timezone) with the current -windowsZones.xml file to get the current conversions (see the documenation for -$(REF parseTZConversions, std, datetime, timezone) for details). diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/phobos-2.082.0/std/algorithm/iteration.d new/phobos-2.082.1/std/algorithm/iteration.d --- old/phobos-2.082.0/std/algorithm/iteration.d 2018-08-27 08:35:33.000000000 +0200 +++ new/phobos-2.082.1/std/algorithm/iteration.d 2018-09-20 19:57:07.000000000 +0200 @@ -5466,7 +5466,7 @@ else { // find with one needle returns the range - auto hitValue = needles[0]; + auto hitValue = match; hitNr = match.empty ? 0 : 1; } @@ -5815,6 +5815,17 @@ }} } +// issue 19207 +@safe pure nothrow unittest +{ + import std.algorithm.comparison : equal; + assert([1, 2, 3, 4].substitute([1], [7]).equal([7, 2, 3, 4])); + assert([1, 2, 3, 4].substitute([2], [7]).equal([1, 7, 3, 4])); + assert([1, 2, 3, 4].substitute([4], [7]).equal([1, 2, 3, 7])); + assert([1, 2, 3, 4].substitute([2, 3], [7]).equal([1, 7, 4])); + assert([1, 2, 3, 4].substitute([3, 4], [7, 8]).equal([1, 2, 7, 8])); +} + // sum /** Sums elements of `r`, which must be a finite diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/phobos-2.082.0/std/format.d new/phobos-2.082.1/std/format.d --- old/phobos-2.082.0/std/format.d 2018-08-27 08:35:33.000000000 +0200 +++ new/phobos-2.082.1/std/format.d 2018-09-20 19:57:07.000000000 +0200 @@ -6321,8 +6321,11 @@ if (spec.width == spec.precision) len += spec.width; - else if (spec.width > 0 && (spec.precision == spec.UNSPECIFIED || spec.width > spec.precision)) + else if (spec.width > 0 && spec.width != spec.DYNAMIC && + (spec.precision == spec.UNSPECIFIED || spec.width > spec.precision)) + { len += spec.width; + } else if (spec.precision != spec.UNSPECIFIED && spec.precision > spec.width) len += spec.precision; } @@ -6345,6 +6348,7 @@ assert(guessLength!char("%2.4f") == 4); assert(guessLength!char("%02d:%02d:%02d") == 8); assert(guessLength!char("%0.2f") == 7); + assert(guessLength!char("%0*d") == 0); } /// ditto diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/phobos-2.082.0/std/net/curl.d new/phobos-2.082.1/std/net/curl.d --- old/phobos-2.082.0/std/net/curl.d 2018-08-27 08:35:33.000000000 +0200 +++ new/phobos-2.082.1/std/net/curl.d 2018-09-20 19:57:07.000000000 +0200 @@ -669,19 +669,27 @@ { import std.uri : urlEncode; - return post(url, urlEncode(postDict), conn); + return post!T(url, urlEncode(postDict), conn); } @system unittest { + import std.algorithm.searching : canFind; + import std.meta : AliasSeq; + + static immutable expected = ["name1=value1&name2=value2", "name2=value2&name1=value1"]; + foreach (host; [testServer.addr, "http://" ~ testServer.addr]) { - testServer.handle((s) { - auto req = s.recvReq!char; - s.send(httpOK(req.bdy)); - }); - auto res = post(host ~ "/path", ["name1" : "value1", "name2" : "value2"]); - assert(res == "name1=value1&name2=value2" || res == "name2=value2&name1=value1"); + foreach (T; AliasSeq!(char, ubyte)) + { + testServer.handle((s) { + auto req = s.recvReq!char; + s.send(httpOK(req.bdy)); + }); + auto res = post!T(host ~ "/path", ["name1" : "value1", "name2" : "value2"]); + assert(canFind(expected, res)); + } } }
participants (1)
-
root