diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/CanBeValInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/CanBeValInspection.kt
index 00e7c3478ea..535fd846733 100644
--- a/idea/src/org/jetbrains/kotlin/idea/inspections/CanBeValInspection.kt
+++ b/idea/src/org/jetbrains/kotlin/idea/inspections/CanBeValInspection.kt
@@ -108,7 +108,7 @@ class CanBeValInspection : AbstractKotlinInspection() {
if (next in visited) continue
if (next in targets) return true
visited.add(next)
- if (canReach(next, targets)) return true
+ if (canReach(next, targets, visited)) return true
}
return false
}
diff --git a/idea/testData/inspections/canBeVal/inspectionData/expected.xml b/idea/testData/inspections/canBeVal/inspectionData/expected.xml
index 124baef166b..5ec5cf9612d 100644
--- a/idea/testData/inspections/canBeVal/inspectionData/expected.xml
+++ b/idea/testData/inspections/canBeVal/inspectionData/expected.xml
@@ -52,4 +52,13 @@
Local 'var' can be declared as 'val'
Can be declared as 'val'
+
+
+ stackOverflowBug.kt
+ 2
+ light_idea_test_case
+
+ Local 'var' can be declared as 'val'
+ Can be declared as 'val'
+
diff --git a/idea/testData/inspections/canBeVal/stackOverflowBug.kt b/idea/testData/inspections/canBeVal/stackOverflowBug.kt
new file mode 100644
index 00000000000..3e194993199
--- /dev/null
+++ b/idea/testData/inspections/canBeVal/stackOverflowBug.kt
@@ -0,0 +1,6 @@
+fun foo() {
+ var a: Int
+ a = 1
+ for (i in 1..10)
+ print(i)
+}