https://issues.dlang.org/show_bug.cgi?id=23490
--- Comment #4 from Iain Buclaw <ibuc...@gdcproject.org> --- With the ICE, it's easier to get a further reduction/consolidation of sources. frop.d --- import pop; class Mu: Pop { } class Frop : Pop { // final // does not fail if declared final void frolick() {} } --- pop.d --- import frop; import zoo: Zoo; class Pop { void poop(Frop ) { } void copy(Zoo ) { } } --- zoo.d --- import pop; import frop; class Foo(): Pop { override void poop(Frop frop) { frop.frolick; } } class Baz { Foo!() foo; Frop frop; } class Bar { static instance() { return new Baz; } auto ss = __traits(getAttributes, instance.frop); } class Zoo { } --- ICE triggered with: dmd -o- pop.d --