From 36397a579db6f5f2602c95a2b865b43108ff31ee Mon Sep 17 00:00:00 2001 From: Sebastian Wilzbach Date: Mon, 19 Jun 2017 22:15:51 +0200 Subject: [PATCH] Fix AssertError on unknown label in unused_label --- src/analysis/unused_label.d | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/src/analysis/unused_label.d b/src/analysis/unused_label.d index 57651bd..7ade5fb 100644 --- a/src/analysis/unused_label.d +++ b/src/analysis/unused_label.d @@ -143,8 +143,11 @@ private: { foreach (label; current.byValue()) { - assert(label.line != size_t.max && label.column != size_t.max); - if (!label.used) + if (label.line == size_t.max || label.column == size_t.max) + { + // TODO: handle unknown labels + } + else if (!label.used) { addErrorMessage(label.line, label.column, "dscanner.suspicious.unused_label", "Label \"" ~ label.name ~ "\" is not used."); @@ -225,5 +228,24 @@ unittest } }c, sac); + // from std.math + assertAnalyzerWarnings(q{ + real polyImpl() { + asm { + jecxz return_ST; + } + } + }c, sac); + + // a label might be hard to find, e.g. in a mixin + assertAnalyzerWarnings(q{ + real polyImpl() { + mixin("return_ST: return 1;"); + asm { + jecxz return_ST; + } + } + }c, sac); + stderr.writeln("Unittest for UnusedLabelCheck passed."); }