Bug 20094 – POSIX: Wrong substitution for templates with argument in same namespace

Status
RESOLVED
Resolution
FIXED
Severity
regression
Priority
P1
Component
dmd
Product
D
Version
D2
Platform
All
OS
Other
Creation time
2019-08-01T04:42:36Z
Last change time
2019-08-01T10:05:38Z
Assigned to
No Owner
Creator
Mathias LANG

Comments

Comment #0 by pro.mathias.lang — 2019-08-01T04:42:36Z
``` extern(C++, "xdr") { struct xvector (T) {} alias Value = xvector!(ubyte); } extern(C++) void test200XX(xvector!(Value)* v); static assert(test200XX.mangleof == `_Z9test200XXPN3xdr7xvectorIS0_IhEEE`); ``` This fails. Mangling difference: Expected: _Z9test200XXPN3xdr7xvectorIS0_IhEEE Actual: _Z9test200XXPN3xdr7xvectorIS_IhEEE Notice that `S_` (the first element) is used, instead of `S0_` (the second). So it seems like one element is not properly added to the array of elements. Will work on a fix. Most likely introduced by some large refactoring in 2.087.
Comment #1 by pro.mathias.lang — 2019-08-01T10:05:38Z
Fixed by https://github.com/dlang/dmd/pull/10256 Also there was a second regression in there, in that the `S0_` substitution should be surrounded by `N .. E`, and that's fixed by https://github.com/dlang/dmd/pull/10257