diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirConstChecks.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirConstChecks.kt index e7c1ff17bfb..f0f89304836 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirConstChecks.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirConstChecks.kt @@ -97,6 +97,10 @@ internal fun checkConstantArguments( } for (exp in (expression as FirCall).arguments) { + if (exp is FirConstExpression<*> && exp.value == null) { + return ConstantArgumentKind.NOT_CONST + } + if (exp is FirResolvedQualifier || exp is FirGetClassCall || exp.getExpandedType().isUnsignedType) { return ConstantArgumentKind.NOT_CONST } diff --git a/compiler/testData/diagnostics/tests/modifiers/const/equals_after.fir.kt b/compiler/testData/diagnostics/tests/modifiers/const/equals_after.fir.kt index cd60c7ac823..22039ddf6ed 100644 --- a/compiler/testData/diagnostics/tests/modifiers/const/equals_after.fir.kt +++ b/compiler/testData/diagnostics/tests/modifiers/const/equals_after.fir.kt @@ -44,3 +44,11 @@ const val equalsString1 = "someStr".equals("123") const val equalsString2 = "someStr" == "otherStr" const val equalsString3 = "someStr".equals(1) const val equalsString4 = "someStr" == 1 + +const val TRUE = true +const val STR = "str" + +const val equalsWithNull1 = 1 == null +const val equalsWithNull2 = null == null +const val equalsWithNull3 = TRUE == null +const val equalsWithNull4 = STR == null diff --git a/compiler/testData/diagnostics/tests/modifiers/const/equals_after.kt b/compiler/testData/diagnostics/tests/modifiers/const/equals_after.kt index 45a6371cc49..08d42a1834d 100644 --- a/compiler/testData/diagnostics/tests/modifiers/const/equals_after.kt +++ b/compiler/testData/diagnostics/tests/modifiers/const/equals_after.kt @@ -44,3 +44,11 @@ const val equalsString1 = "someStr".equa const val equalsString2 = "someStr" == "otherStr" const val equalsString3 = "someStr".equals(1) const val equalsString4 = "someStr" == 1 + +const val TRUE = true +const val STR = "str" + +const val equalsWithNull1 = 1 == null +const val equalsWithNull2 = null == null +const val equalsWithNull3 = TRUE == null +const val equalsWithNull4 = STR == null diff --git a/compiler/testData/diagnostics/tests/modifiers/const/equals_before.fir.kt b/compiler/testData/diagnostics/tests/modifiers/const/equals_before.fir.kt index b4da50686ba..fd420a0e2d8 100644 --- a/compiler/testData/diagnostics/tests/modifiers/const/equals_before.fir.kt +++ b/compiler/testData/diagnostics/tests/modifiers/const/equals_before.fir.kt @@ -44,3 +44,11 @@ const val equalsString1 = "someStr".equa const val equalsString2 = "someStr" == "otherStr" const val equalsString3 = "someStr".equals(1) const val equalsString4 = "someStr" == 1 + +const val TRUE = true +const val STR = "str" + +const val equalsWithNull1 = 1 == null +const val equalsWithNull2 = null == null +const val equalsWithNull3 = TRUE == null +const val equalsWithNull4 = STR == null diff --git a/compiler/testData/diagnostics/tests/modifiers/const/equals_before.kt b/compiler/testData/diagnostics/tests/modifiers/const/equals_before.kt index 00bfdc2f401..d338cc69283 100644 --- a/compiler/testData/diagnostics/tests/modifiers/const/equals_before.kt +++ b/compiler/testData/diagnostics/tests/modifiers/const/equals_before.kt @@ -44,3 +44,11 @@ const val equalsString1 = "someStr".equa const val equalsString2 = "someStr" == "otherStr" const val equalsString3 = "someStr".equals(1) const val equalsString4 = "someStr" == 1 + +const val TRUE = true +const val STR = "str" + +const val equalsWithNull1 = 1 == null +const val equalsWithNull2 = null == null +const val equalsWithNull3 = TRUE == null +const val equalsWithNull4 = STR == null diff --git a/compiler/testData/diagnostics/testsWithJsStdLibAndBackendCompilation/jsCode/compileTimeStringWithIntrinConstCall.fir.kt b/compiler/testData/diagnostics/testsWithJsStdLibAndBackendCompilation/jsCode/compileTimeStringWithIntrinConstCall.fir.kt index b9c07d8a191..08defbf812b 100644 --- a/compiler/testData/diagnostics/testsWithJsStdLibAndBackendCompilation/jsCode/compileTimeStringWithIntrinConstCall.fir.kt +++ b/compiler/testData/diagnostics/testsWithJsStdLibAndBackendCompilation/jsCode/compileTimeStringWithIntrinConstCall.fir.kt @@ -89,15 +89,15 @@ fun testEq() { js("{ var a = ${1U == 1U}; }") js("{ var a = ${UONE == 1U}; }") js("{ var a = ${"FOO" == STR}; }") - js("{ var a = ${TRUE == null}; }") - js("{ var a = ${STR == null}; }") + js("{ var a = ${TRUE == null}; }") + js("{ var a = ${STR == null}; }") js("{ var a = ${1 != 1}; }") js("{ var a = ${1U != 1U}; }") js("{ var a = ${UONE != 1U}; }") js("{ var a = ${"FOO" != STR}; }") - js("{ var a = ${TRUE != null}; }") - js("{ var a = ${STR != null}; }") + js("{ var a = ${TRUE != null}; }") + js("{ var a = ${STR != null}; }") js("{ var a = ${1 === 1}; }") js("{ var a = ${TRUE === false}; }")