FIR: Do not verify descriptors consistency for FIR-based IR functions

This commit is contained in:
Denis.Zharkov
2022-03-28 18:45:39 +03:00
committed by teamcity
parent 2a6700e5d5
commit 55159eba45
3 changed files with 11 additions and 3 deletions
@@ -13,6 +13,7 @@ import org.jetbrains.kotlin.test.backend.ir.IrBackendInput
import org.jetbrains.kotlin.test.directives.CodegenTestDirectives
import org.jetbrains.kotlin.test.directives.CodegenTestDirectives.EXTERNAL_FILE
import org.jetbrains.kotlin.test.directives.model.DirectivesContainer
import org.jetbrains.kotlin.test.model.FrontendKinds
import org.jetbrains.kotlin.test.model.TestModule
import org.jetbrains.kotlin.test.services.TestServices
@@ -27,7 +28,7 @@ class IrTreeVerifierHandler(testServices: TestServices) : AbstractIrHandler(test
for ((testFile, irFile) in testFileToIrFile) {
if (testFile?.directives?.contains(EXTERNAL_FILE) == true) continue
IrVerifier(assertions).verifyWithAssert(irFile)
IrVerifier(assertions, module.frontendKind == FrontendKinds.FIR).verifyWithAssert(irFile)
val actualDump = irFile.dumpTreesFromLineNumber(lineNumber = 0, normalizeNames = true)
@@ -140,7 +140,7 @@ abstract class AbstractIrTextTestCase : AbstractIrGeneratorTestCase() {
}
private fun verify(irFile: IrFile) {
IrVerifier(JUnit4Assertions).verifyWithAssert(irFile)
IrVerifier(JUnit4Assertions, isFir = false).verifyWithAssert(irFile)
}
internal class Expectations(val regexps: List<RegexpInText>, val irTreeFileLabels: List<IrTreeFileLabel>)
@@ -16,7 +16,10 @@ import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid
import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid
import org.jetbrains.kotlin.test.Assertions
class IrVerifier(private val assertions: Assertions) : IrElementVisitorVoid {
class IrVerifier(
private val assertions: Assertions,
private val isFir: Boolean,
) : IrElementVisitorVoid {
private val errors = ArrayList<String>()
private val symbolForDeclaration = HashMap<IrElement, IrSymbol>()
@@ -95,6 +98,10 @@ class IrVerifier(private val assertions: Assertions) : IrElementVisitorVoid {
override fun visitFunction(declaration: IrFunction) {
visitDeclaration(declaration)
// For FIR, we don't use descriptors to build IR, but vice versa
// And at some points, like context descriptors, they might differ
if (isFir) return
val functionDescriptor = declaration.descriptor
checkTypeParameters(functionDescriptor, declaration, functionDescriptor.typeParameters)