diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/DfaMemoryStateImpl.java b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/DfaMemoryStateImpl.java index 2b9e0c426f2e..97edc6889db9 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/DfaMemoryStateImpl.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/DfaMemoryStateImpl.java @@ -722,7 +722,7 @@ public class DfaMemoryStateImpl implements DfaMemoryState { } RelationType constantRelation = getFloatingConstantRelation(leftType, rightType); if (constantRelation != null) { - return constantRelation == relationType; + return relationType.isSubRelation(constantRelation); } if (canBeNaN(leftType) || canBeNaN(rightType)) { if (dfaLeft == dfaRight && dfaLeft instanceof DfaVariableValue && !(dfaLeft.getType() instanceof PsiPrimitiveType)) { diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/FloatLoop.java b/java/java-tests/testData/inspection/dataFlow/fixture/FloatLoop.java new file mode 100644 index 000000000000..4f0d64fc7e61 --- /dev/null +++ b/java/java-tests/testData/inspection/dataFlow/fixture/FloatLoop.java @@ -0,0 +1,9 @@ +import java.util.*; + +public class FloatLoop { + void test() { + for(float f = 0.0f; f != 2.0f; f += 0.01f){ + System.out.println(f); + } + } +} diff --git a/java/java-tests/testSrc/com/intellij/java/codeInspection/DataFlowRangeAnalysisTest.java b/java/java-tests/testSrc/com/intellij/java/codeInspection/DataFlowRangeAnalysisTest.java index dafdfbf4137c..c89b3e636da4 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInspection/DataFlowRangeAnalysisTest.java +++ b/java/java-tests/testSrc/com/intellij/java/codeInspection/DataFlowRangeAnalysisTest.java @@ -68,6 +68,7 @@ public class DataFlowRangeAnalysisTest extends DataFlowInspectionTestCase { public void testStringConcat() { doTest(); } public void testUnaryPlusMinus() { doTest(); } public void testWidenPlusInLoop() { doTest(); } + public void testFloatLoop() { doTest(); } public void testWidenMulInLoop() { doTest(); } public void testReduceBinOpOnCast() { doTest(); } public void testSuppressZeroReport() { doTest(); }