From 5504efe2869fb78d117eeb13454c32c99de2a693 Mon Sep 17 00:00:00 2001 From: Tagir Valeev Date: Mon, 31 Oct 2022 15:10:17 +0100 Subject: [PATCH] [java-dfa] Properly balance stack when increment/decrement variable is unresolved Found by property tests GitOrigin-RevId: 581bc8d7a12cc43037a3936126a68cdf3678e884 --- .../dataFlow/java/ControlFlowAnalyzer.java | 2 ++ .../inspection/dataFlow/fixture/IncompleteLoop.java | 10 ++++++++++ .../java/codeInspection/DataFlowRangeAnalysisTest.java | 1 + 3 files changed, 13 insertions(+) create mode 100644 java/java-tests/testData/inspection/dataFlow/fixture/IncompleteLoop.java diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/java/ControlFlowAnalyzer.java b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/java/ControlFlowAnalyzer.java index 8ffe57228ed7..875720ed0832 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/java/ControlFlowAnalyzer.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/java/ControlFlowAnalyzer.java @@ -2172,6 +2172,8 @@ public class ControlFlowAnalyzer extends JavaElementVisitor { } PsiPrimitiveType unboxedType = PsiPrimitiveType.getOptionallyUnboxedType(operandType); if (unboxedType == null) { + // Unknown type; likely erroneous code: replace old_value with unknown + addInstruction(new PopInstruction()); pushUnknown(); } else { generateBoxingUnboxingInstructionFor(operand, unboxedType); diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/IncompleteLoop.java b/java/java-tests/testData/inspection/dataFlow/fixture/IncompleteLoop.java new file mode 100644 index 000000000000..2d7350316144 --- /dev/null +++ b/java/java-tests/testData/inspection/dataFlow/fixture/IncompleteLoop.java @@ -0,0 +1,10 @@ +import java.util.*; + +class Test { + + void test(int last) + { + for (; i < last; i++) { + } + } +} \ No newline at end of file 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 701e3118a9dc..c93b80d58297 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInspection/DataFlowRangeAnalysisTest.java +++ b/java/java-tests/testSrc/com/intellij/java/codeInspection/DataFlowRangeAnalysisTest.java @@ -89,4 +89,5 @@ public class DataFlowRangeAnalysisTest extends DataFlowInspectionTestCase { public void testFloatingPointCasts() { doTest(); } public void testFloatingPointMaxLoop() { doTest(); } public void testStringIndexOfRelation() { doTest(); } + public void testIncompleteLoop() { doTest(); } }