Skip to content

Commit 0ec1e95

Browse files
authored
Merge pull request #672 from wilzbach/fix-671
Fix #671 - False positive in infinite range check merged-on-behalf-of: BBasile <[email protected]>
2 parents 103a327 + cd545d5 commit 0ec1e95

File tree

1 file changed

+23
-3
lines changed

1 file changed

+23
-3
lines changed

src/dscanner/analysis/incorrect_infinite_range.d

+23-3
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)