https://issues.dlang.org/show_bug.cgi?id=16397
--- Comment #2 from Martin Nowak <[email protected]> --- cat > a.d << CODE module a; import b; unittest { foo!int(); } CODE cat > b.d << CODE module b; void foo(T)() { return; // line is covered } unittest { foo!int(); } CODE dmd -c -cov -unittest a.d dmd -c -cov -unittest b.d dmd -main a.o b.o -ofbug ./bug cat a.lst b.lst ---- |module a; |import b; | |unittest |{ 1| foo!int(); |} a.d is 100% covered |module b; | |void foo(T)() |{ 0000000| return; // line is covered |} | |unittest |{ 1| foo!int(); |} b.d is 50% covered ---- With different linker order, both calls use the foo instantiation with coverage instrumentation. dmd -main b.o a.o -ofbug ./bug cat a.lst b.lst ---- |module a; |import b; | |unittest |{ 1| foo!int(); |} a.d is 100% covered |module b; | |void foo(T)() |{ 2| return; // line is covered |} | |unittest |{ 1| foo!int(); |} b.d is 100% covered ➜ D cat a.lst b.lst 20:18:21 |module a; |import b; | |unittest |{ 1| foo!int(); |} a.d is 100% covered |module b; | |void foo(T)() |{ 2| return; // line is covered |} | |unittest |{ 1| foo!int(); |} b.d is 100% covered ---- --
