@@ -62,6 +62,8 @@ final class IncorrectInfiniteRangeCheck : BaseAnalyzer
62
62
63
63
override void visit (const ReturnStatement rs)
64
64
{
65
+ if (inStruct == 0 || line == size_t .max) // not within a struct yet
66
+ return ;
65
67
if (! rs.expression || rs.expression.items.length != 1 )
66
68
return ;
67
69
UnaryExpression unary = cast (UnaryExpression) rs.expression.items[0 ];
@@ -82,7 +84,7 @@ private:
82
84
uint inStruct;
83
85
enum string KEY = " dscanner.suspicious.incorrect_infinite_range" ;
84
86
enum string MESSAGE = " Use `enum bool empty = false;` to define an infinite range." ;
85
- size_t line;
87
+ size_t line = size_t .max ;
86
88
size_t column;
87
89
}
88
90
@@ -123,8 +125,6 @@ class C { bool empty() { return false; } } // [warn]: %1$s
123
125
124
126
}c
125
127
.format(IncorrectInfiniteRangeCheck.MESSAGE ), sac);
126
-
127
- stderr.writeln(" Unittest for IncorrectInfiniteRangeCheck passed." );
128
128
}
129
129
130
130
// test for https://github.com/dlang-community/D-Scanner/issues/656
@@ -136,3 +136,23 @@ version(none) struct Foo
136
136
return ;
137
137
}
138
138
}
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