@@ -62,6 +62,8 @@ final class IncorrectInfiniteRangeCheck : BaseAnalyzer
6262
6363 override void visit (const ReturnStatement rs)
6464 {
65+ if (inStruct == 0 || line == size_t .max) // not within a struct yet
66+ return ;
6567 if (! rs.expression || rs.expression.items.length != 1 )
6668 return ;
6769 UnaryExpression unary = cast (UnaryExpression) rs.expression.items[0 ];
@@ -82,7 +84,7 @@ private:
8284 uint inStruct;
8385 enum string KEY = " dscanner.suspicious.incorrect_infinite_range" ;
8486 enum string MESSAGE = " Use `enum bool empty = false;` to define an infinite range." ;
85- size_t line;
87+ size_t line = size_t .max ;
8688 size_t column;
8789}
8890
@@ -123,8 +125,6 @@ class C { bool empty() { return false; } } // [warn]: %1$s
123125
124126}c
125127 .format(IncorrectInfiniteRangeCheck.MESSAGE ), sac);
126-
127- stderr.writeln(" Unittest for IncorrectInfiniteRangeCheck passed." );
128128}
129129
130130// test for https://github.com/dlang-community/D-Scanner/issues/656
@@ -136,3 +136,23 @@ version(none) struct Foo
136136 return ;
137137 }
138138}
139+
140+ unittest
141+ {
142+ import std.stdio : stderr;
143+ import dscanner.analysis.config : StaticAnalysisConfig, Check, disabledConfig;
144+ import std.format : format;
145+
146+ StaticAnalysisConfig sac = disabledConfig();
147+ sac.incorrect_infinite_range_check = Check.enabled;
148+ assertAnalyzerWarnings(q{
149+ enum isAllZeroBits = ()
150+ {
151+ if (true )
152+ return true ;
153+ else
154+ return false ;
155+ }();
156+ }, sac);
157+ stderr.writeln(" Unittest for IncorrectInfiniteRangeCheck passed." );
158+ }
0 commit comments