You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Commit that caused regression.
https://github.com/dlang/dmd/pull/6998/commits/46b0f6b9a2a089ed6dcd106ca03fc7b2e040385d#diff-33cd340a268c63317687a0a372cd3d94L403
It happen that there are two mutable types T that have different deco, but point to the same immutable!T because of failure to recognize that T and T are the same type.
---
struct MultiwayMerge()
{
bool compFront()
{
return true;
}
struct BinaryHeap(alias less){ struct Impl { int _payload; } void initialize() { immutable Impl init; checkTypes(init); } void checkTypes(T)(immutable T init) { alias IT = typeof(init); // immutable(Impl) alias MT = T; // Impl static assert(MT.mangleof == "S6setops__T13MultiwayMergeZQq__T10BinaryHeapS_DQBu__TQBqZQBu9compFrontMFNaNbNiNfZbZQBz4Impl"); static assert(IT.mangleof == "yS6setops__T13MultiwayMergeZQq__T10BinaryHeapS_DQBu__TQBqZQBu9compFrontMFNaNbNiNfZbZQBz4Impl"); } // Should be same as MT static assert(Impl.mangleof == "S6setops__T13MultiwayMergeZQq__T10BinaryHeapS_DQBu__TQBqZQBu9compFrontMFNaNbNiNfZbZQBz4Impl");}BinaryHeap!(compFront) _heap;
}
MultiwayMerge!() multiwayMerge;
---
What looks to be the case is that mangleToBuffer is called before compFront has finished its semantic, so the first mutable T does not have pure nothrow @nogc encoded into its symbol.
The text was updated successfully, but these errors were encountered:
ibuclaw (@ibuclaw) commented on 2018-06-24T14:21:25Z
Commit looks related https://github.com/dlang/dmd/commit/2c0ead859f208d80190d4e634b5a0737d4b64645
Introduced adding a link between `shared(T)`, `inout(T)` and `const(T)` with `T`. But left out `immutable(T)` despite this comment here that seems to suggest that there should be one.
https://github.com/dlang/dmd/commit/2c0ead859f208d80190d4e634b5a0737d4b64645#diff-ffafa03255a57832dd09031af6cb915dR470
ibuclaw (@ibuclaw) commented on 2018-06-24T14:24:48Z
Adding in the reference fixes immediate bug.
https://github.com/dlang/dmd/pull/8398
But now `pure nothrow @nogc` is no longer part of the symbol mangle.
Iain Buclaw (@ibuclaw) reported this on 2018-06-24T14:19:16Z
Transferred from https://issues.dlang.org/show_bug.cgi?id=19021
CC List
Description
The text was updated successfully, but these errors were encountered: