digitalmars.D.bugs - [Issue 19163] New: static/tuple foreach counted incorrectly in
- d-bugmail puremagic.com (57/57) Aug 13 2018 https://issues.dlang.org/show_bug.cgi?id=19163
https://issues.dlang.org/show_bug.cgi?id=19163 Issue ID: 19163 Summary: static/tuple foreach counted incorrectly in coverage analysis Product: D Version: D2 Hardware: x86 OS: Windows Status: NEW Severity: enhancement Priority: P1 Component: dmd Assignee: nobody puremagic.com Reporter: simen.kjaras gmail.com import std.meta : AliasSeq; unittest { foreach (n; 0..7) sw: switch (n) { static foreach (i, e; AliasSeq!(int, string, bool)) case i: break sw; foreach (i, e; AliasSeq!(int, string, bool)) case i+3: break sw; default: break; } static foreach (i, e; AliasSeq!(int, string, bool)) { } foreach (i, e; AliasSeq!(int, string, bool)) { } } The above code gives this coverage analysis: |import std.meta : AliasSeq; | |unittest { 24| foreach (n; 0..7) 7| sw: switch (n) { 0000000| static foreach (i, e; AliasSeq!(int, string, bool)) 3| case i: 3| break sw; 0000000| foreach (i, e; AliasSeq!(int, string, bool)) 3| case i+3: 3| break sw; 1| default: 1| break; | } 6| static foreach (i, e; AliasSeq!(int, string, bool)) { | } 6| foreach (i, e; AliasSeq!(int, string, bool)) { | } |} Four things stand out here - the static foreach and tuple foreach inside the switch has a coverage count of 0, and the foreach outside are counted. I contend that both are incorrect - the lines contain no run-time executable code, and so shouldn't show up in the coverage report at all. --
Aug 13 2018