[Manglers] Uniform handling of the error type in signature mangled names in all manglers
^KT-63723
This commit is contained in:
committed by
Space Team
parent
089b7f31b5
commit
194efac68c
@@ -134,6 +134,10 @@ open class FirMangleComputer(
|
|||||||
|
|
||||||
override fun mangleType(tBuilder: StringBuilder, type: ConeKotlinType, declarationSiteSession: FirSession) {
|
override fun mangleType(tBuilder: StringBuilder, type: ConeKotlinType, declarationSiteSession: FirSession) {
|
||||||
when (type) {
|
when (type) {
|
||||||
|
is ConeErrorType -> {
|
||||||
|
tBuilder.appendSignature(MangleConstant.ERROR_MARK)
|
||||||
|
}
|
||||||
|
|
||||||
is ConeLookupTagBasedType -> {
|
is ConeLookupTagBasedType -> {
|
||||||
when (val symbol = type.lookupTag.toSymbol(declarationSiteSession)) {
|
when (val symbol = type.lookupTag.toSymbol(declarationSiteSession)) {
|
||||||
is FirTypeAliasSymbol -> {
|
is FirTypeAliasSymbol -> {
|
||||||
|
|||||||
+5
@@ -13,6 +13,7 @@ import org.jetbrains.kotlin.ir.descriptors.IrPropertyDelegateDescriptor
|
|||||||
import org.jetbrains.kotlin.renderer.DescriptorRenderer
|
import org.jetbrains.kotlin.renderer.DescriptorRenderer
|
||||||
import org.jetbrains.kotlin.types.*
|
import org.jetbrains.kotlin.types.*
|
||||||
import org.jetbrains.kotlin.types.checker.SimpleClassicTypeSystemContext
|
import org.jetbrains.kotlin.types.checker.SimpleClassicTypeSystemContext
|
||||||
|
import org.jetbrains.kotlin.types.error.ErrorClassDescriptor
|
||||||
import org.jetbrains.kotlin.types.model.TypeSystemContext
|
import org.jetbrains.kotlin.types.model.TypeSystemContext
|
||||||
import org.jetbrains.kotlin.types.typeUtil.isUnit
|
import org.jetbrains.kotlin.types.typeUtil.isUnit
|
||||||
|
|
||||||
@@ -92,6 +93,10 @@ open class DescriptorMangleComputer(builder: StringBuilder, mode: MangleMode) :
|
|||||||
is SimpleType -> {
|
is SimpleType -> {
|
||||||
|
|
||||||
when (val classifier = type.constructor.declarationDescriptor) {
|
when (val classifier = type.constructor.declarationDescriptor) {
|
||||||
|
is ErrorClassDescriptor -> {
|
||||||
|
tBuilder.appendSignature(MangleConstant.ERROR_MARK)
|
||||||
|
return
|
||||||
|
}
|
||||||
is ClassDescriptor -> with(copy(MangleMode.FQNAME)) { classifier.visit() }
|
is ClassDescriptor -> with(copy(MangleMode.FQNAME)) { classifier.visit() }
|
||||||
is TypeParameterDescriptor -> tBuilder.mangleTypeParameterReference(classifier)
|
is TypeParameterDescriptor -> tBuilder.mangleTypeParameterReference(classifier)
|
||||||
else -> error("Unexpected classifier: $classifier")
|
else -> error("Unexpected classifier: $classifier")
|
||||||
|
|||||||
@@ -0,0 +1,29 @@
|
|||||||
|
FILE fqName:<root> fileName:/unresolvedReference.kt
|
||||||
|
PROPERTY name:test1 visibility:public modality:FINAL [val]
|
||||||
|
FIELD PROPERTY_BACKING_FIELD name:test1 type:IrErrorType(null) visibility:private [final,static]
|
||||||
|
EXPRESSION_BODY
|
||||||
|
ERROR_CALL 'Unresolved reference: <Unresolved name: unresolved>#' type=IrErrorType(null)
|
||||||
|
FUN DEFAULT_PROPERTY_ACCESSOR name:<get-test1> visibility:public modality:FINAL <> () returnType:IrErrorType(null)
|
||||||
|
correspondingProperty: PROPERTY name:test1 visibility:public modality:FINAL [val]
|
||||||
|
BLOCK_BODY
|
||||||
|
RETURN type=kotlin.Nothing from='public final fun <get-test1> (): IrErrorType(null) declared in <root>'
|
||||||
|
GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:test1 type:IrErrorType(null) visibility:private [final,static]' type=IrErrorType(null) origin=null
|
||||||
|
PROPERTY name:test2 visibility:public modality:FINAL [val]
|
||||||
|
FIELD PROPERTY_BACKING_FIELD name:test2 type:IrErrorType(null) visibility:private [final,static]
|
||||||
|
EXPRESSION_BODY
|
||||||
|
ERROR_CALL 'Unresolved reference: <Unresolved name: unresolved>#' type=IrErrorType(null)
|
||||||
|
FUN DEFAULT_PROPERTY_ACCESSOR name:<get-test2> visibility:public modality:FINAL <> () returnType:IrErrorType(null)
|
||||||
|
correspondingProperty: PROPERTY name:test2 visibility:public modality:FINAL [val]
|
||||||
|
BLOCK_BODY
|
||||||
|
RETURN type=kotlin.Nothing from='public final fun <get-test2> (): IrErrorType(null) declared in <root>'
|
||||||
|
GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:test2 type:IrErrorType(null) visibility:private [final,static]' type=IrErrorType(null) origin=null
|
||||||
|
PROPERTY name:test3 visibility:public modality:FINAL [val]
|
||||||
|
FIELD PROPERTY_BACKING_FIELD name:test3 type:IrErrorType(null) visibility:private [final,static]
|
||||||
|
EXPRESSION_BODY
|
||||||
|
ERROR_CALL 'Unresolved reference: <Unresolved name: unresolved>#' type=IrErrorType(null)
|
||||||
|
CONST Int type=kotlin.Int value=56
|
||||||
|
FUN DEFAULT_PROPERTY_ACCESSOR name:<get-test3> visibility:public modality:FINAL <> () returnType:IrErrorType(null)
|
||||||
|
correspondingProperty: PROPERTY name:test3 visibility:public modality:FINAL [val]
|
||||||
|
BLOCK_BODY
|
||||||
|
RETURN type=kotlin.Nothing from='public final fun <get-test3> (): IrErrorType(null) declared in <root>'
|
||||||
|
GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:test3 type:IrErrorType(null) visibility:private [final,static]' type=IrErrorType(null) origin=null
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
val test1: ErrorType
|
||||||
|
field = error("") /* ErrorCallExpression */
|
||||||
|
get
|
||||||
|
|
||||||
|
val test2: ErrorType
|
||||||
|
field = error("") /* ErrorCallExpression */
|
||||||
|
get
|
||||||
|
|
||||||
|
val test3: ErrorType
|
||||||
|
field = error("") /* ErrorCallExpression */56;
|
||||||
|
get
|
||||||
@@ -28,12 +28,3 @@ FILE fqName:<root> fileName:/unresolvedReference.kt
|
|||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
RETURN type=kotlin.Nothing from='public final fun <get-test3> (): IrErrorType([Error type: Not found recorded type for 42.unresolved(56)]) declared in <root>'
|
RETURN type=kotlin.Nothing from='public final fun <get-test3> (): IrErrorType([Error type: Not found recorded type for 42.unresolved(56)]) declared in <root>'
|
||||||
GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:test3 type:IrErrorType([Error type: Not found recorded type for 42.unresolved(56)]) visibility:private [final,static]' type=IrErrorType([Error type: Not found recorded type for 42.unresolved(56)]) origin=null
|
GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:test3 type:IrErrorType([Error type: Not found recorded type for 42.unresolved(56)]) visibility:private [final,static]' type=IrErrorType([Error type: Not found recorded type for 42.unresolved(56)]) origin=null
|
||||||
PROPERTY name:test4 visibility:public modality:FINAL [val]
|
|
||||||
FIELD PROPERTY_BACKING_FIELD name:test4 type:IrErrorType([Error type: Not found recorded type for 42 *]) visibility:private [final,static]
|
|
||||||
EXPRESSION_BODY
|
|
||||||
ERROR_EXPR '42 *' type=IrErrorType([Error type: Error expression type])
|
|
||||||
FUN DEFAULT_PROPERTY_ACCESSOR name:<get-test4> visibility:public modality:FINAL <> () returnType:IrErrorType([Error type: Not found recorded type for 42 *])
|
|
||||||
correspondingProperty: PROPERTY name:test4 visibility:public modality:FINAL [val]
|
|
||||||
BLOCK_BODY
|
|
||||||
RETURN type=kotlin.Nothing from='public final fun <get-test4> (): IrErrorType([Error type: Not found recorded type for 42 *]) declared in <root>'
|
|
||||||
GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:test4 type:IrErrorType([Error type: Not found recorded type for 42 *]) visibility:private [final,static]' type=IrErrorType([Error type: Not found recorded type for 42 *]) origin=null
|
|
||||||
|
|||||||
@@ -1,10 +1,8 @@
|
|||||||
// IGNORE_BACKEND_K2: JVM_IR
|
// IGNORE_ERRORS
|
||||||
// IGNORE_BACKEND: JS_IR
|
// IGNORE_FIR_DIAGNOSTICS
|
||||||
// !IGNORE_ERRORS
|
|
||||||
// DIAGNOSTICS: -UNRESOLVED_REFERENCE -OVERLOAD_RESOLUTION_AMBIGUITY
|
// DIAGNOSTICS: -UNRESOLVED_REFERENCE -OVERLOAD_RESOLUTION_AMBIGUITY
|
||||||
|
// ERROR_POLICY: SEMANTIC
|
||||||
// KT-61141: org.jetbrains.kotlin.psi2ir.generators.ErrorExpressionException: null: KtNameReferenceExpression: unresolved
|
// SKIP_KLIB_TEST
|
||||||
// IGNORE_BACKEND: NATIVE
|
|
||||||
|
|
||||||
val test1 = unresolved
|
val test1 = unresolved
|
||||||
|
|
||||||
@@ -12,5 +10,3 @@ val test2: Unresolved =
|
|||||||
unresolved()
|
unresolved()
|
||||||
|
|
||||||
val test3 = 42.unresolved(56)
|
val test3 = 42.unresolved(56)
|
||||||
|
|
||||||
val test4 = 42 *<!SYNTAX!><!>
|
|
||||||
|
|||||||
@@ -9,7 +9,3 @@ val test2: ErrorType
|
|||||||
val test3: ErrorType
|
val test3: ErrorType
|
||||||
field = error("") /* ErrorCallExpression */42; 56;
|
field = error("") /* ErrorCallExpression */42; 56;
|
||||||
get
|
get
|
||||||
|
|
||||||
val test4: ErrorType
|
|
||||||
field = error("") /* ErrorExpression */
|
|
||||||
get
|
|
||||||
|
|||||||
@@ -5,12 +5,12 @@
|
|||||||
val test1: ErrorType
|
val test1: ErrorType
|
||||||
// CHECK JVM_IR:
|
// CHECK JVM_IR:
|
||||||
// Mangled name: #<get-test1>(){}<ERROR CLASS>
|
// Mangled name: #<get-test1>(){}<ERROR CLASS>
|
||||||
// Mangled name for the signature computed from Ir: <get-test1>(){}<ERROR CLASS>
|
// Public signature: /test1.<get-test1>|3342025465423582211[0]
|
||||||
// Mangled name for the signature computed from Descriptor: <get-test1>(){}<Error class: unknown class>
|
// Public signature debug description: <get-test1>(){}<ERROR CLASS>
|
||||||
// Public signature by IR: /test1.<get-test1>|3342025465423582211[0]
|
// CHECK JS_IR NATIVE:
|
||||||
// Public signature by IR debug description: <get-test1>(){}<ERROR CLASS>
|
// Mangled name: #<get-test1>(){}
|
||||||
// Public signature by Frontend: /test1.<get-test1>|-4817139884021780494[0]
|
// Public signature: /test1.<get-test1>|-5735092642142423279[0]
|
||||||
// Public signature by Frontend debug description: <get-test1>(){}<Error class: unknown class>
|
// Public signature debug description: <get-test1>(){}
|
||||||
get
|
get
|
||||||
|
|
||||||
// CHECK:
|
// CHECK:
|
||||||
@@ -20,12 +20,12 @@ val test1: ErrorType
|
|||||||
val test2: ErrorType
|
val test2: ErrorType
|
||||||
// CHECK JVM_IR:
|
// CHECK JVM_IR:
|
||||||
// Mangled name: #<get-test2>(){}<ERROR CLASS>
|
// Mangled name: #<get-test2>(){}<ERROR CLASS>
|
||||||
// Mangled name for the signature computed from Ir: <get-test2>(){}<ERROR CLASS>
|
// Public signature: /test2.<get-test2>|-7934828597056891230[0]
|
||||||
// Mangled name for the signature computed from Descriptor: <get-test2>(){}<Error class: unknown class>
|
// Public signature debug description: <get-test2>(){}<ERROR CLASS>
|
||||||
// Public signature by IR: /test2.<get-test2>|-7934828597056891230[0]
|
// CHECK JS_IR NATIVE:
|
||||||
// Public signature by IR debug description: <get-test2>(){}<ERROR CLASS>
|
// Mangled name: #<get-test2>(){}
|
||||||
// Public signature by Frontend: /test2.<get-test2>|1859255286326922853[0]
|
// Public signature: /test2.<get-test2>|-5218942532816206869[0]
|
||||||
// Public signature by Frontend debug description: <get-test2>(){}<Error class: unknown class>
|
// Public signature debug description: <get-test2>(){}
|
||||||
get
|
get
|
||||||
|
|
||||||
// CHECK:
|
// CHECK:
|
||||||
@@ -35,26 +35,10 @@ val test2: ErrorType
|
|||||||
val test3: ErrorType
|
val test3: ErrorType
|
||||||
// CHECK JVM_IR:
|
// CHECK JVM_IR:
|
||||||
// Mangled name: #<get-test3>(){}<ERROR CLASS>
|
// Mangled name: #<get-test3>(){}<ERROR CLASS>
|
||||||
// Mangled name for the signature computed from Ir: <get-test3>(){}<ERROR CLASS>
|
// Public signature: /test3.<get-test3>|3662345001344960274[0]
|
||||||
// Mangled name for the signature computed from Descriptor: <get-test3>(){}<Error class: unknown class>
|
// Public signature debug description: <get-test3>(){}<ERROR CLASS>
|
||||||
// Public signature by IR: /test3.<get-test3>|3662345001344960274[0]
|
// CHECK JS_IR NATIVE:
|
||||||
// Public signature by IR debug description: <get-test3>(){}<ERROR CLASS>
|
// Mangled name: #<get-test3>(){}
|
||||||
// Public signature by Frontend: /test3.<get-test3>|-2322568342617474229[0]
|
// Public signature: /test3.<get-test3>|-7333791615083236686[0]
|
||||||
// Public signature by Frontend debug description: <get-test3>(){}<Error class: unknown class>
|
// Public signature debug description: <get-test3>(){}
|
||||||
get
|
get
|
||||||
|
|
||||||
// CHECK:
|
|
||||||
// Mangled name: {}test4
|
|
||||||
// Public signature: /test4|-9115637610245762085[0]
|
|
||||||
// Public signature debug description: {}test4
|
|
||||||
val test4: ErrorType
|
|
||||||
// CHECK JVM_IR:
|
|
||||||
// Mangled name: #<get-test4>(){}<ERROR CLASS>
|
|
||||||
// Mangled name for the signature computed from Ir: <get-test4>(){}<ERROR CLASS>
|
|
||||||
// Mangled name for the signature computed from Descriptor: <get-test4>(){}<Error class: unknown class>
|
|
||||||
// Public signature by IR: /test4.<get-test4>|-8718941795621950036[0]
|
|
||||||
// Public signature by IR debug description: <get-test4>(){}<ERROR CLASS>
|
|
||||||
// Public signature by Frontend: /test4.<get-test4>|-5181690683324812065[0]
|
|
||||||
// Public signature by Frontend debug description: <get-test4>(){}<Error class: unknown class>
|
|
||||||
get
|
|
||||||
|
|
||||||
|
|||||||
+5
-1
@@ -26,6 +26,7 @@ import org.jetbrains.kotlin.psi2ir.Psi2IrTranslator
|
|||||||
import org.jetbrains.kotlin.psi2ir.generators.DeclarationStubGeneratorImpl
|
import org.jetbrains.kotlin.psi2ir.generators.DeclarationStubGeneratorImpl
|
||||||
import org.jetbrains.kotlin.test.TargetBackend
|
import org.jetbrains.kotlin.test.TargetBackend
|
||||||
import org.jetbrains.kotlin.test.backend.ir.IrBackendInput
|
import org.jetbrains.kotlin.test.backend.ir.IrBackendInput
|
||||||
|
import org.jetbrains.kotlin.test.directives.CodegenTestDirectives
|
||||||
import org.jetbrains.kotlin.test.frontend.classic.ClassicFrontendOutputArtifact
|
import org.jetbrains.kotlin.test.frontend.classic.ClassicFrontendOutputArtifact
|
||||||
import org.jetbrains.kotlin.test.model.BackendKinds
|
import org.jetbrains.kotlin.test.model.BackendKinds
|
||||||
import org.jetbrains.kotlin.test.model.Frontend2BackendConverter
|
import org.jetbrains.kotlin.test.model.Frontend2BackendConverter
|
||||||
@@ -69,7 +70,10 @@ class ClassicFrontend2NativeIrConverter(
|
|||||||
val sourceFiles: List<KtFile> = psiFiles.values.toList()
|
val sourceFiles: List<KtFile> = psiFiles.values.toList()
|
||||||
val translator = Psi2IrTranslator(
|
val translator = Psi2IrTranslator(
|
||||||
configuration.languageVersionSettings,
|
configuration.languageVersionSettings,
|
||||||
Psi2IrConfiguration(ignoreErrors = false, configuration.partialLinkageConfig.isEnabled),
|
Psi2IrConfiguration(
|
||||||
|
ignoreErrors = CodegenTestDirectives.IGNORE_ERRORS in module.directives,
|
||||||
|
configuration.partialLinkageConfig.isEnabled
|
||||||
|
),
|
||||||
configuration.irMessageLogger::checkNoUnboundSymbols
|
configuration.irMessageLogger::checkNoUnboundSymbols
|
||||||
)
|
)
|
||||||
val manglerDesc = KonanManglerDesc
|
val manglerDesc = KonanManglerDesc
|
||||||
|
|||||||
Reference in New Issue
Block a user