Skip to content

Commit 6a8096b

Browse files
committed
Merge remote-tracking branch 'origin/dmd-rewrite-stable' into merge_stable
2 parents faac493 + 1e92632 commit 6a8096b

File tree

3 files changed

+24
-2
lines changed

3 files changed

+24
-2
lines changed

CHANGELOG.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# LDC master
22

33
#### Big news
4-
- Frontend, druntime and Phobos are at version [2.108.0+](https://dlang.org/changelog/2.108.0.html). (#4591, #4615, #4619, #4622)
4+
- Frontend, druntime and Phobos are at version [2.108.0+](https://dlang.org/changelog/2.108.0.html). (#4591, #4615, #4619, #4622, #4623)
55
- Support for [LLVM 18](https://releases.llvm.org/18.1.0/docs/ReleaseNotes.html). The prebuilt packages use v18.1.3 (except for macOS arm64). (#4599, #4605, #4607, #4604)
66
- Android: Switch to native ELF TLS, supported since API level 29 (Android v10), dropping our former custom TLS emulation (requiring a modified LLVM and a legacy ld.bfd linker). The prebuilt packages themselves require Android v10+ (armv7a) / v11+ (aarch64) too, and are built with NDK r26d. Shared druntime and Phobos libraries are now available (`-link-defaultlib-shared`), as on regular Linux. (#4618)
77

dmd/expressionsem.d

+2-1
Original file line numberDiff line numberDiff line change
@@ -5341,7 +5341,8 @@ private extern (C++) final class ExpressionSemanticVisitor : Visitor
53415341
lowering = new DotIdExp(exp.loc, lowering, Id.object);
53425342

53435343
auto tbn = exp.type.nextOf();
5344-
while (tbn.ty == Tarray)
5344+
size_t i = nargs;
5345+
while (tbn.ty == Tarray && --i)
53455346
tbn = tbn.nextOf();
53465347
auto unqualTbn = tbn.unqualify(MODFlags.wild | MODFlags.const_ |
53475348
MODFlags.immutable_ | MODFlags.shared_);

tests/dmd/runnable/test24498.d

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import core.memory;
2+
3+
void main()
4+
{
5+
{
6+
int[][] a = new int[][](2, 2);
7+
assert(!(GC.getAttr(a.ptr) & GC.BlkAttr.NO_SCAN));
8+
assert(GC.getAttr(a[0].ptr) & GC.BlkAttr.NO_SCAN);
9+
}
10+
{
11+
void*[][] a = new void*[][](2, 2);
12+
assert(!(GC.getAttr(a.ptr) & GC.BlkAttr.NO_SCAN));
13+
assert(!(GC.getAttr(a[0].ptr) & GC.BlkAttr.NO_SCAN));
14+
}
15+
{
16+
int[][][] a = new int[][][](2, 2);
17+
assert(!(GC.getAttr(a.ptr) & GC.BlkAttr.NO_SCAN));
18+
assert(!(GC.getAttr(a[0].ptr) & GC.BlkAttr.NO_SCAN));
19+
assert(a[0][0].ptr is null);
20+
}
21+
}

0 commit comments

Comments
 (0)