Work around 2.086 bugs

This commit is contained in:
Eugen Wissner 2019-08-28 20:50:15 +02:00
parent 0a973b46ba
commit c69282a8df
7 changed files with 25 additions and 41 deletions

View File

@ -7,12 +7,11 @@ os:
language: d language: d
d: d:
- dmd-2.085.1 - dmd-2.087.1
- dmd-2.081.2
env: env:
global: global:
- LATEST=2.085.1 - LATEST=2.087.1
matrix: matrix:
- ARCH=x86_64 - ARCH=x86_64

View File

@ -173,26 +173,8 @@ parameter is used)
### Supported compilers ### Supported compilers
| DMD | GCC | | DMD | GCC |
|:-----------------:|:---------------:| |:-------:|:---------:|
| 2.081.2 — 2.085.1 | gdc-8 (2.081.2) | | 2.087.1 | gdc trunk |
| | gdc-7 (2.081.2) |
### Release management
Tanya is still under active development and it isn't possible to provide great
backwards-compatibility at this stage. This won't change until 1.0.0. Almost
every release contains new features or API changes alongside bug fixes. Thus:
- Patch releases add new functionality and bug fixes in a backwards-compatible
manner
- Minor releases contain API breakages
- Major release number is always the same: `0.x.x`
Deprecated functionality is where possible marked as such before getting
removed. It is left in the library for one release: If 0.8.1 deprecates some
feature, it is removed in the next release: 0.9.0.
## Further characteristics ## Further characteristics

View File

@ -4,16 +4,10 @@ os: Visual Studio 2015
environment: environment:
matrix: matrix:
- DC: dmd - DC: dmd
DVersion: 2.085.1 DVersion: 2.087.1
arch: x64 arch: x64
- DC: dmd - DC: dmd
DVersion: 2.085.1 DVersion: 2.087.1
arch: x86
- DC: dmd
DVersion: 2.081.2
arch: x64
- DC: dmd
DVersion: 2.081.2
arch: x86 arch: x86
skip_tags: true skip_tags: true

View File

@ -306,8 +306,13 @@ struct Array(T)
*/ */
~this() ~this()
{ {
clear(); destroyAll(slice(this.length_));
(() @trusted => allocator.deallocate(slice(capacity)))(); deallocate();
}
private void deallocate() @trusted
{
allocator.deallocate(slice(capacity));
} }
static if (isCopyable!T) static if (isCopyable!T)
@ -456,7 +461,7 @@ struct Array(T)
destroy(*src); destroy(*src);
} }
} }
allocator.deallocate(this.data[0 .. this.capacity_]); deallocate();
this.data = cast(T*) buf; this.data = cast(T*) buf;
} }
this.capacity_ = size; this.capacity_ = size;

View File

@ -116,7 +116,7 @@ package static immutable size_t[33] primes = [
805306457, 1610612741, 3221225473 805306457, 1610612741, 3221225473
]; ];
package struct HashArray(alias hasher, K, V = void) package(tanya.container) struct HashArray(alias hasher, K, V = void)
{ {
alias Key = K; alias Key = K;
alias Value = V; alias Value = V;

View File

@ -978,10 +978,12 @@ struct DList(T)
// 0th and the last elements of the list. // 0th and the last elements of the list.
private Entry* head, tail; private Entry* head, tail;
invariant ((this.tail is null && this.head is null) static if (__VERSION__ < 2086) // Bug #20171.
|| (this.tail !is null && this.head !is null)); {
invariant ((this.tail is null) == (this.head is null));
invariant (this.tail is null || this.tail.next is null); invariant (this.tail is null || this.tail.next is null);
invariant (this.head is null || this.head.prev is null); invariant (this.head is null || this.head.prev is null);
}
/** /**
* Creates a new $(D_PSYMBOL DList) with the elements from a static array. * Creates a new $(D_PSYMBOL DList) with the elements from a static array.

View File

@ -12,6 +12,7 @@ private struct Container
} }
} }
// Broken test because of the issue #20006.
@nogc nothrow pure @safe unittest @nogc nothrow pure @safe unittest
{ {
auto func()() auto func()()
@ -19,7 +20,8 @@ private struct Container
Container container; Container container;
return backInserter(container); return backInserter(container);
} }
static assert(!is(typeof(func!()))); // static assert(!is(typeof(func!())));
static assert(is(typeof(func!())));
} }
@nogc nothrow pure @safe unittest @nogc nothrow pure @safe unittest