FIR checker: reproduce KT-42350

This commit is contained in:
Jinseong Jeon
2020-09-30 13:12:59 -07:00
committed by Dmitriy Novozhilov
parent da69e3db7c
commit ea2f773e54
9 changed files with 262 additions and 0 deletions
@@ -3844,6 +3844,16 @@ public class FirOldFrontendDiagnosticsTestGenerated extends AbstractFirOldFronte
runTest("compiler/testData/diagnostics/tests/controlFlowAnalysis/assignedInIfElse.kt");
}
@TestMetadata("assignedInTryWithCatch.kt")
public void testAssignedInTryWithCatch() throws Exception {
runTest("compiler/testData/diagnostics/tests/controlFlowAnalysis/assignedInTryWithCatch.kt");
}
@TestMetadata("assignedInTryWithoutCatch.kt")
public void testAssignedInTryWithoutCatch() throws Exception {
runTest("compiler/testData/diagnostics/tests/controlFlowAnalysis/assignedInTryWithoutCatch.kt");
}
@TestMetadata("assignmentInLocalsInConstructor.kt")
public void testAssignmentInLocalsInConstructor() throws Exception {
runTest("compiler/testData/diagnostics/tests/controlFlowAnalysis/assignmentInLocalsInConstructor.kt");
@@ -0,0 +1,70 @@
fun assignedInTry() {
val a: Int
try {
a = 42
} catch (e: Exception) {
} finally {
}
<!UNINITIALIZED_VARIABLE!>a<!>.hashCode()
}
fun sideEffectBeforeAssignmentInTry(s: Any) {
val a: Int
try {
s as String // Potential cast exception
a = 42
} catch (e: Exception) {
} finally {
}
<!UNINITIALIZED_VARIABLE!>a<!>.hashCode()
}
fun assignedInTryAndCatch() {
val a: Int
try {
a = 42
} catch (e: Exception) {
a = 41
} finally {
}
<!UNINITIALIZED_VARIABLE!>a<!>.hashCode()
}
fun sideEffectBeforeAssignedInTryAndCatch(s: Any) {
val a: Int
try {
s as String // Potential cast exception
a = 42
} catch (e: Exception) {
s as String // Potential cast exception
a = 41
} finally {
}
<!UNINITIALIZED_VARIABLE!>a<!>.hashCode()
}
fun assignedAtAll() {
val a: Int
try {
a = 42
} catch (e: Exception) {
a = 41
} finally {
a = 40
}
a.hashCode()
}
fun sideEffectBeforeAssignedInTryCatchButNotFinally(s: Any) {
val a: Int
try {
s as String // Potential cast exception
a = 42
} catch (e: Exception) {
s as String // Potential cast exception
a = 41
} finally {
a = 40
}
a.hashCode()
}
@@ -0,0 +1,70 @@
fun assignedInTry() {
val a: Int
try {
a = 42
} catch (e: Exception) {
} finally {
}
<!UNINITIALIZED_VARIABLE!>a<!>.hashCode()
}
fun sideEffectBeforeAssignmentInTry(s: Any) {
val a: Int
try {
s as String // Potential cast exception
a = 42
} catch (e: Exception) {
} finally {
}
<!UNINITIALIZED_VARIABLE!>a<!>.hashCode()
}
fun assignedInTryAndCatch() {
val a: Int
try {
a = 42
} catch (e: Exception) {
<!VAL_REASSIGNMENT!>a<!> = 41
} finally {
}
a.hashCode()
}
fun sideEffectBeforeAssignedInTryAndCatch(s: Any) {
val a: Int
try {
s as String // Potential cast exception
a = 42
} catch (e: Exception) {
s as String // Potential cast exception
<!VAL_REASSIGNMENT!>a<!> = 41
} finally {
}
a.hashCode()
}
fun assignedAtAll() {
val a: Int
try {
<!UNUSED_VALUE!>a =<!> 42
} catch (e: Exception) {
<!UNUSED_VALUE!><!VAL_REASSIGNMENT!>a<!> =<!> 41
} finally {
a = 40
}
a.hashCode()
}
fun sideEffectBeforeAssignedInTryCatchButNotFinally(s: Any) {
val a: Int
try {
s as String // Potential cast exception
<!UNUSED_VALUE!>a =<!> 42
} catch (e: Exception) {
s as String // Potential cast exception
<!UNUSED_VALUE!><!VAL_REASSIGNMENT!>a<!> =<!> 41
} finally {
a = 40
}
a.hashCode()
}
@@ -0,0 +1,8 @@
package
public fun assignedAtAll(): kotlin.Unit
public fun assignedInTry(): kotlin.Unit
public fun assignedInTryAndCatch(): kotlin.Unit
public fun sideEffectBeforeAssignedInTryAndCatch(/*0*/ s: kotlin.Any): kotlin.Unit
public fun sideEffectBeforeAssignedInTryCatchButNotFinally(/*0*/ s: kotlin.Any): kotlin.Unit
public fun sideEffectBeforeAssignmentInTry(/*0*/ s: kotlin.Any): kotlin.Unit
@@ -0,0 +1,39 @@
fun assignedInTry() {
val a: Int
try {
a = 42
} finally {
}
<!UNINITIALIZED_VARIABLE!>a<!>.hashCode()
}
fun sideEffectBeforeAssignmentInTry(s: Any) {
val a: Int
try {
s as String // Potential cast exception
a = 42
} finally {
}
<!UNINITIALIZED_VARIABLE!>a<!>.hashCode()
}
fun assignedInTryAndFinally() {
val a: Int
try {
a = 42
} finally {
a = 41
}
a.hashCode()
}
fun sideEffectBeforeAssignmentInTryButNotFinally(s: Any) {
val a: Int
try {
s as String // Potential cast exception
a = 42
} finally {
a = 41
}
a.hashCode()
}
@@ -0,0 +1,39 @@
fun assignedInTry() {
val a: Int
try {
a = 42
} finally {
}
a.hashCode()
}
fun sideEffectBeforeAssignmentInTry(s: Any) {
val a: Int
try {
s as String // Potential cast exception
a = 42
} finally {
}
a.hashCode()
}
fun assignedInTryAndFinally() {
val a: Int
try {
<!UNUSED_VALUE!>a =<!> 42
} finally {
<!VAL_REASSIGNMENT!>a<!> = 41
}
a.hashCode()
}
fun sideEffectBeforeAssignmentInTryButNotFinally(s: Any) {
val a: Int
try {
s as String // Potential cast exception
<!UNUSED_VALUE!>a =<!> 42
} finally {
<!VAL_REASSIGNMENT!>a<!> = 41
}
a.hashCode()
}
@@ -0,0 +1,6 @@
package
public fun assignedInTry(): kotlin.Unit
public fun assignedInTryAndFinally(): kotlin.Unit
public fun sideEffectBeforeAssignmentInTry(/*0*/ s: kotlin.Any): kotlin.Unit
public fun sideEffectBeforeAssignmentInTryButNotFinally(/*0*/ s: kotlin.Any): kotlin.Unit
@@ -3851,6 +3851,16 @@ public class DiagnosticsTestGenerated extends AbstractDiagnosticsTestWithFirVali
runTest("compiler/testData/diagnostics/tests/controlFlowAnalysis/assignedInIfElse.kt");
}
@TestMetadata("assignedInTryWithCatch.kt")
public void testAssignedInTryWithCatch() throws Exception {
runTest("compiler/testData/diagnostics/tests/controlFlowAnalysis/assignedInTryWithCatch.kt");
}
@TestMetadata("assignedInTryWithoutCatch.kt")
public void testAssignedInTryWithoutCatch() throws Exception {
runTest("compiler/testData/diagnostics/tests/controlFlowAnalysis/assignedInTryWithoutCatch.kt");
}
@TestMetadata("assignmentInLocalsInConstructor.kt")
public void testAssignmentInLocalsInConstructor() throws Exception {
runTest("compiler/testData/diagnostics/tests/controlFlowAnalysis/assignmentInLocalsInConstructor.kt");
@@ -3846,6 +3846,16 @@ public class DiagnosticsUsingJavacTestGenerated extends AbstractDiagnosticsUsing
runTest("compiler/testData/diagnostics/tests/controlFlowAnalysis/assignedInIfElse.kt");
}
@TestMetadata("assignedInTryWithCatch.kt")
public void testAssignedInTryWithCatch() throws Exception {
runTest("compiler/testData/diagnostics/tests/controlFlowAnalysis/assignedInTryWithCatch.kt");
}
@TestMetadata("assignedInTryWithoutCatch.kt")
public void testAssignedInTryWithoutCatch() throws Exception {
runTest("compiler/testData/diagnostics/tests/controlFlowAnalysis/assignedInTryWithoutCatch.kt");
}
@TestMetadata("assignmentInLocalsInConstructor.kt")
public void testAssignmentInLocalsInConstructor() throws Exception {
runTest("compiler/testData/diagnostics/tests/controlFlowAnalysis/assignmentInLocalsInConstructor.kt");