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
import org.jetbrains.kotlin.test.directives.CodegenTestDirectives.EXTERNAL_FILE import org.jetbrains.kotlin.test.directives.CodegenTestDirectives.EXTERNAL_FILE
import org.jetbrains.kotlin.test.directives.model.DirectivesContainer 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.model.TestModule
import org.jetbrains.kotlin.test.services.TestServices import org.jetbrains.kotlin.test.services.TestServices
@@ -27,7 +28,7 @@ class IrTreeVerifierHandler(testServices: TestServices) : AbstractIrHandler(test
for ((testFile, irFile) in testFileToIrFile) { for ((testFile, irFile) in testFileToIrFile) {
if (testFile?.directives?.contains(EXTERNAL_FILE) == true) continue 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) val actualDump = irFile.dumpTreesFromLineNumber(lineNumber = 0, normalizeNames = true)
@@ -140,7 +140,7 @@ abstract class AbstractIrTextTestCase : AbstractIrGeneratorTestCase() {
} }
private fun verify(irFile: IrFile) { 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>) 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.ir.visitors.acceptChildrenVoid
import org.jetbrains.kotlin.test.Assertions 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 errors = ArrayList<String>()
private val symbolForDeclaration = HashMap<IrElement, IrSymbol>() private val symbolForDeclaration = HashMap<IrElement, IrSymbol>()
@@ -95,6 +98,10 @@ class IrVerifier(private val assertions: Assertions) : IrElementVisitorVoid {
override fun visitFunction(declaration: IrFunction) { override fun visitFunction(declaration: IrFunction) {
visitDeclaration(declaration) 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 val functionDescriptor = declaration.descriptor
checkTypeParameters(functionDescriptor, declaration, functionDescriptor.typeParameters) checkTypeParameters(functionDescriptor, declaration, functionDescriptor.typeParameters)