https://gcc.gnu.org/g:ddf94524f9accb47c1fc59191739ec34c5907eb8
commit r16-7125-gddf94524f9accb47c1fc59191739ec34c5907eb8 Author: Iain Buclaw <[email protected]> Date: Wed Jan 28 23:06:23 2026 +0100 d: Fix ICE in ExprVisitor::visit, at d/expr.cc:2224 [PR123419] The original assert expected the type of `__traits(initSymbol)' to be exactly `const(void[])', but because D strips const from arrays to allow passing slices as mutable ranges to template functions, so it got turned into `const(void)[]'. PR d/123419 gcc/d/ChangeLog: * expr.cc (ExprVisitor::visit (VarExp *)): Adjust assertion. gcc/testsuite/ChangeLog: * gdc.dg/pr123419.d: New test. Diff: --- gcc/d/expr.cc | 2 +- gcc/testsuite/gdc.dg/pr123419.d | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/gcc/d/expr.cc b/gcc/d/expr.cc index 79d1839f0d6c..77c9412fd940 100644 --- a/gcc/d/expr.cc +++ b/gcc/d/expr.cc @@ -2156,7 +2156,7 @@ public: { /* Generate a slice for non-zero initialized aggregates, otherwise create an empty array. */ - gcc_assert (e->type->isConst () + gcc_assert (e->type->nextOf ()->isConst () && e->type->nextOf ()->ty == TY::Tvoid); tree type = build_ctype (e->type); diff --git a/gcc/testsuite/gdc.dg/pr123419.d b/gcc/testsuite/gdc.dg/pr123419.d new file mode 100644 index 000000000000..69ad444deb8b --- /dev/null +++ b/gcc/testsuite/gdc.dg/pr123419.d @@ -0,0 +1,9 @@ +// { dg-do compile } +struct S123419 {} + +void t123419(T)(T _) {} + +void f123419() +{ + t123419(__traits(initSymbol, S123419)); +}
