JVM IR: Ignore class type parameters if function is static
Otherwise, it leads to type parameters duplication in case of suspendImpls, since they inherit type parameters from containing class. #KT-56407: Fixed
This commit is contained in:
committed by
Space Team
parent
c7bc439661
commit
e42efe1ee6
+6
@@ -10519,6 +10519,12 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT
|
||||
runTest("compiler/testData/codegen/box/coroutines/kt55494.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("kt56407.kt")
|
||||
public void testKt56407() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/coroutines/kt56407.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("lastExpressionIsLoop.kt")
|
||||
public void testLastExpressionIsLoop() throws Exception {
|
||||
|
||||
@@ -192,6 +192,10 @@ val IrClass.typeConstructorParameters: Sequence<IrTypeParameter>
|
||||
// Ideally this should be fixed in FE.
|
||||
null
|
||||
}
|
||||
current is IrSimpleFunction && current.isStatic -> {
|
||||
// Static functions don't capture type parameters.
|
||||
null
|
||||
}
|
||||
current.isAnonymousObject -> {
|
||||
// Anonymous classes don't capture type parameters.
|
||||
null
|
||||
|
||||
@@ -0,0 +1,90 @@
|
||||
@kotlin.Metadata
|
||||
public interface Client {
|
||||
// source: 'kt56407.kt'
|
||||
public abstract @org.jetbrains.annotations.Nullable method connectToServer(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): java.lang.Object
|
||||
}
|
||||
|
||||
@kotlin.coroutines.jvm.internal.DebugMetadata
|
||||
@kotlin.Metadata
|
||||
final class DefaultAuthorizableClient$connectToServer$2 {
|
||||
// source: 'kt56407.kt'
|
||||
enclosing method DefaultAuthorizableClient.connectToServer$suspendImpl(LDefaultAuthorizableClient;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
|
||||
synthetic final field $nextObjectQuery: DefaultAuthorizableClient$connectToServer$NextObjectQuery
|
||||
field label: int
|
||||
synthetic final field this$0: DefaultAuthorizableClient
|
||||
inner (anonymous) class DefaultAuthorizableClient$connectToServer$2
|
||||
inner (local) class DefaultAuthorizableClient$connectToServer$NextObjectQuery NextObjectQuery
|
||||
method <init>(p0: DefaultAuthorizableClient, p1: DefaultAuthorizableClient$connectToServer$NextObjectQuery, p2: kotlin.coroutines.Continuation): void
|
||||
public final @org.jetbrains.annotations.NotNull method create(@org.jetbrains.annotations.Nullable p0: java.lang.Object, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): kotlin.coroutines.Continuation
|
||||
public final @org.jetbrains.annotations.Nullable method invoke(@org.jetbrains.annotations.NotNull p0: java.lang.String, @org.jetbrains.annotations.Nullable p1: kotlin.coroutines.Continuation): java.lang.Object
|
||||
public synthetic bridge method invoke(p0: java.lang.Object, p1: java.lang.Object): java.lang.Object
|
||||
public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object
|
||||
}
|
||||
|
||||
@kotlin.Metadata
|
||||
public final class DefaultAuthorizableClient$connectToServer$NextObjectQuery {
|
||||
// source: 'kt56407.kt'
|
||||
enclosing method DefaultAuthorizableClient.connectToServer$suspendImpl(LDefaultAuthorizableClient;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
|
||||
inner (local) class DefaultAuthorizableClient$connectToServer$NextObjectQuery NextObjectQuery
|
||||
public method <init>(): void
|
||||
}
|
||||
|
||||
@kotlin.Metadata
|
||||
public abstract class DefaultAuthorizableClient {
|
||||
// source: 'kt56407.kt'
|
||||
inner (anonymous) class DefaultAuthorizableClient$connectToServer$2
|
||||
inner (local) class DefaultAuthorizableClient$connectToServer$NextObjectQuery NextObjectQuery
|
||||
public method <init>(): void
|
||||
synthetic static method connectToServer$suspendImpl(p0: DefaultAuthorizableClient, p1: kotlin.coroutines.Continuation): java.lang.Object
|
||||
public @org.jetbrains.annotations.Nullable method connectToServer(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): java.lang.Object
|
||||
}
|
||||
|
||||
@kotlin.Metadata
|
||||
public final class Kt56407Kt$box$1$1 {
|
||||
// source: 'kt56407.kt'
|
||||
enclosing method Kt56407Kt$box$1.invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
|
||||
inner (anonymous) class Kt56407Kt$box$1
|
||||
inner (anonymous) class Kt56407Kt$box$1$1
|
||||
method <init>(): void
|
||||
}
|
||||
|
||||
@kotlin.coroutines.jvm.internal.DebugMetadata
|
||||
@kotlin.Metadata
|
||||
final class Kt56407Kt$box$1 {
|
||||
// source: 'kt56407.kt'
|
||||
enclosing method Kt56407Kt.box()Ljava/lang/String;
|
||||
field label: int
|
||||
inner (anonymous) class Kt56407Kt$box$1
|
||||
inner (anonymous) class Kt56407Kt$box$1$1
|
||||
method <init>(p0: kotlin.coroutines.Continuation): void
|
||||
public final @org.jetbrains.annotations.NotNull method create(@org.jetbrains.annotations.Nullable p0: java.lang.Object, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): kotlin.coroutines.Continuation
|
||||
public final @org.jetbrains.annotations.Nullable method invoke(@org.jetbrains.annotations.NotNull p0: java.lang.String, @org.jetbrains.annotations.Nullable p1: kotlin.coroutines.Continuation): java.lang.Object
|
||||
public synthetic bridge method invoke(p0: java.lang.Object, p1: java.lang.Object): java.lang.Object
|
||||
public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object
|
||||
}
|
||||
|
||||
@kotlin.Metadata
|
||||
public final class Kt56407Kt$builder$$inlined$Continuation$1 {
|
||||
// source: 'Continuation.kt'
|
||||
enclosing method Kt56407Kt.builder(Lkotlin/jvm/functions/Function2;)V
|
||||
synthetic final field $context: kotlin.coroutines.CoroutineContext
|
||||
inner (anonymous) class Kt56407Kt$builder$$inlined$Continuation$1
|
||||
public method <init>(p0: kotlin.coroutines.CoroutineContext): void
|
||||
public @org.jetbrains.annotations.NotNull method getContext(): kotlin.coroutines.CoroutineContext
|
||||
public method resumeWith(@org.jetbrains.annotations.NotNull p0: java.lang.Object): void
|
||||
}
|
||||
|
||||
@kotlin.Metadata
|
||||
public final class Kt56407Kt {
|
||||
// source: 'kt56407.kt'
|
||||
inner (anonymous) class Kt56407Kt$box$1
|
||||
public final static @org.jetbrains.annotations.NotNull method box(): java.lang.String
|
||||
public final static method builder(@org.jetbrains.annotations.NotNull p0: kotlin.jvm.functions.Function2): void
|
||||
private final static method consumeEach$$forInline(p0: java.lang.Object, p1: kotlin.jvm.functions.Function1, p2: kotlin.coroutines.Continuation): java.lang.Object
|
||||
public final static @org.jetbrains.annotations.Nullable method consumeEach(p0: java.lang.Object, @org.jetbrains.annotations.NotNull p1: kotlin.jvm.functions.Function1, @org.jetbrains.annotations.NotNull p2: kotlin.coroutines.Continuation): java.lang.Object
|
||||
}
|
||||
|
||||
@kotlin.Metadata
|
||||
public interface ServerBase {
|
||||
// source: 'kt56407.kt'
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
// WITH_STDLIB
|
||||
// CHECK_BYTECODE_LISTING
|
||||
|
||||
import kotlin.coroutines.*
|
||||
|
||||
interface ServerBase
|
||||
|
||||
interface Client<ServerType : ServerBase> {
|
||||
suspend fun connectToServer()
|
||||
}
|
||||
|
||||
public suspend inline fun <E> E.consumeEach(action: (E) -> Unit): Unit = action(this)
|
||||
|
||||
fun builder(c: suspend (String) -> Unit) {
|
||||
c.startCoroutine("", Continuation(EmptyCoroutineContext) {
|
||||
it.getOrThrow()
|
||||
})
|
||||
}
|
||||
|
||||
abstract class DefaultAuthorizableClient<ServerType : ServerBase> : Client<ServerType> {
|
||||
override suspend fun connectToServer() {
|
||||
class NextObjectQuery
|
||||
|
||||
val nextObjectQuery = NextObjectQuery()
|
||||
|
||||
builder {
|
||||
consumeEach { nextObjectQuery }
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
builder {
|
||||
// make sure all classfiles are loaded
|
||||
object : DefaultAuthorizableClient<ServerBase>() {}.connectToServer()
|
||||
}
|
||||
|
||||
return "OK"
|
||||
}
|
||||
@@ -0,0 +1,87 @@
|
||||
@kotlin.Metadata
|
||||
public interface Client {
|
||||
// source: 'kt56407.kt'
|
||||
public abstract @org.jetbrains.annotations.Nullable method connectToServer(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): java.lang.Object
|
||||
}
|
||||
|
||||
@kotlin.coroutines.jvm.internal.DebugMetadata
|
||||
@kotlin.Metadata
|
||||
final class DefaultAuthorizableClient$connectToServer$2 {
|
||||
// source: 'kt56407.kt'
|
||||
enclosing method DefaultAuthorizableClient.connectToServer(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
|
||||
synthetic final field $nextObjectQuery: DefaultAuthorizableClient$connectToServer$NextObjectQuery
|
||||
field label: int
|
||||
synthetic final field this$0: DefaultAuthorizableClient
|
||||
inner (anonymous) class DefaultAuthorizableClient$connectToServer$2
|
||||
method <init>(p0: DefaultAuthorizableClient, p1: DefaultAuthorizableClient$connectToServer$NextObjectQuery, p2: kotlin.coroutines.Continuation): void
|
||||
public final @org.jetbrains.annotations.NotNull method create(@org.jetbrains.annotations.Nullable p0: java.lang.Object, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): kotlin.coroutines.Continuation
|
||||
public final method invoke(p0: java.lang.Object, p1: java.lang.Object): java.lang.Object
|
||||
public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object
|
||||
}
|
||||
|
||||
@kotlin.Metadata
|
||||
public final class DefaultAuthorizableClient$connectToServer$NextObjectQuery {
|
||||
// source: 'kt56407.kt'
|
||||
enclosing method DefaultAuthorizableClient.connectToServer(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
|
||||
inner (local) class DefaultAuthorizableClient$connectToServer$NextObjectQuery NextObjectQuery
|
||||
public method <init>(): void
|
||||
}
|
||||
|
||||
@kotlin.Metadata
|
||||
public abstract class DefaultAuthorizableClient {
|
||||
// source: 'kt56407.kt'
|
||||
inner (anonymous) class DefaultAuthorizableClient$connectToServer$2
|
||||
inner (local) class DefaultAuthorizableClient$connectToServer$NextObjectQuery NextObjectQuery
|
||||
public method <init>(): void
|
||||
synthetic static method connectToServer$suspendImpl(p0: DefaultAuthorizableClient, p1: kotlin.coroutines.Continuation): java.lang.Object
|
||||
public @org.jetbrains.annotations.Nullable method connectToServer(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): java.lang.Object
|
||||
}
|
||||
|
||||
@kotlin.Metadata
|
||||
public final class Kt56407Kt$box$1$1 {
|
||||
// source: 'kt56407.kt'
|
||||
enclosing method Kt56407Kt$box$1.invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
|
||||
inner (anonymous) class Kt56407Kt$box$1
|
||||
inner (anonymous) class Kt56407Kt$box$1$1
|
||||
method <init>(): void
|
||||
}
|
||||
|
||||
@kotlin.coroutines.jvm.internal.DebugMetadata
|
||||
@kotlin.Metadata
|
||||
final class Kt56407Kt$box$1 {
|
||||
// source: 'kt56407.kt'
|
||||
enclosing method Kt56407Kt.box()Ljava/lang/String;
|
||||
field label: int
|
||||
inner (anonymous) class Kt56407Kt$box$1
|
||||
inner (anonymous) class Kt56407Kt$box$1$1
|
||||
method <init>(p0: kotlin.coroutines.Continuation): void
|
||||
public final @org.jetbrains.annotations.NotNull method create(@org.jetbrains.annotations.Nullable p0: java.lang.Object, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): kotlin.coroutines.Continuation
|
||||
public final method invoke(p0: java.lang.Object, p1: java.lang.Object): java.lang.Object
|
||||
public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object
|
||||
}
|
||||
|
||||
@kotlin.Metadata
|
||||
public final class Kt56407Kt$builder$$inlined$Continuation$1 {
|
||||
// source: 'Continuation.kt'
|
||||
enclosing method Kt56407Kt.builder(Lkotlin/jvm/functions/Function2;)V
|
||||
synthetic final field $context: kotlin.coroutines.CoroutineContext
|
||||
inner (anonymous) class Kt56407Kt$builder$$inlined$Continuation$1
|
||||
public method <init>(p0: kotlin.coroutines.CoroutineContext): void
|
||||
public @org.jetbrains.annotations.NotNull method getContext(): kotlin.coroutines.CoroutineContext
|
||||
public method resumeWith(@org.jetbrains.annotations.NotNull p0: java.lang.Object): void
|
||||
}
|
||||
|
||||
@kotlin.Metadata
|
||||
public final class Kt56407Kt {
|
||||
// source: 'kt56407.kt'
|
||||
inner (anonymous) class Kt56407Kt$box$1
|
||||
public final static @org.jetbrains.annotations.NotNull method box(): java.lang.String
|
||||
public final static method builder(@org.jetbrains.annotations.NotNull p0: kotlin.jvm.functions.Function2): void
|
||||
private final static @org.jetbrains.annotations.Nullable method consumeEach$$forInline(p0: java.lang.Object, @org.jetbrains.annotations.NotNull p1: kotlin.jvm.functions.Function1, @org.jetbrains.annotations.NotNull p2: kotlin.coroutines.Continuation): java.lang.Object
|
||||
public final static @org.jetbrains.annotations.Nullable method consumeEach(p0: java.lang.Object, @org.jetbrains.annotations.NotNull p1: kotlin.jvm.functions.Function1, @org.jetbrains.annotations.NotNull p2: kotlin.coroutines.Continuation): java.lang.Object
|
||||
}
|
||||
|
||||
@kotlin.Metadata
|
||||
public interface ServerBase {
|
||||
// source: 'kt56407.kt'
|
||||
}
|
||||
+6
@@ -10321,6 +10321,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
|
||||
runTest("compiler/testData/codegen/box/coroutines/kt55494.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("kt56407.kt")
|
||||
public void testKt56407() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/coroutines/kt56407.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("lastExpressionIsLoop.kt")
|
||||
public void testLastExpressionIsLoop() throws Exception {
|
||||
|
||||
+6
@@ -10519,6 +10519,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes
|
||||
runTest("compiler/testData/codegen/box/coroutines/kt55494.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("kt56407.kt")
|
||||
public void testKt56407() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/coroutines/kt56407.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("lastExpressionIsLoop.kt")
|
||||
public void testLastExpressionIsLoop() throws Exception {
|
||||
|
||||
+5
@@ -8117,6 +8117,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes
|
||||
runTest("compiler/testData/codegen/box/coroutines/kt55494.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("kt56407.kt")
|
||||
public void testKt56407() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/coroutines/kt56407.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("lastExpressionIsLoop.kt")
|
||||
public void testLastExpressionIsLoop() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/coroutines/lastExpressionIsLoop.kt");
|
||||
|
||||
+6
@@ -7299,6 +7299,12 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest {
|
||||
runTest("compiler/testData/codegen/box/coroutines/kt55494.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("kt56407.kt")
|
||||
public void testKt56407() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/coroutines/kt56407.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("lastExpressionIsLoop.kt")
|
||||
public void testLastExpressionIsLoop() throws Exception {
|
||||
|
||||
+6
@@ -7395,6 +7395,12 @@ public class FirJsCodegenBoxTestGenerated extends AbstractFirJsCodegenBoxTest {
|
||||
runTest("compiler/testData/codegen/box/coroutines/kt55494.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("kt56407.kt")
|
||||
public void testKt56407() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/coroutines/kt56407.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("lastExpressionIsLoop.kt")
|
||||
public void testLastExpressionIsLoop() throws Exception {
|
||||
|
||||
+6
@@ -7395,6 +7395,12 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest {
|
||||
runTest("compiler/testData/codegen/box/coroutines/kt55494.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("kt56407.kt")
|
||||
public void testKt56407() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/coroutines/kt56407.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("lastExpressionIsLoop.kt")
|
||||
public void testLastExpressionIsLoop() throws Exception {
|
||||
|
||||
+6
@@ -7395,6 +7395,12 @@ public class IrJsES6CodegenBoxTestGenerated extends AbstractIrJsES6CodegenBoxTes
|
||||
runTest("compiler/testData/codegen/box/coroutines/kt55494.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("kt56407.kt")
|
||||
public void testKt56407() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/coroutines/kt56407.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("lastExpressionIsLoop.kt")
|
||||
public void testLastExpressionIsLoop() throws Exception {
|
||||
|
||||
+6
@@ -8352,6 +8352,12 @@ public class K2NativeCodegenBoxTestGenerated extends AbstractNativeCodegenBoxTes
|
||||
runTest("compiler/testData/codegen/box/coroutines/kt55494.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("kt56407.kt")
|
||||
public void testKt56407() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/coroutines/kt56407.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("lastExpressionIsLoop.kt")
|
||||
public void testLastExpressionIsLoop() throws Exception {
|
||||
|
||||
+6
@@ -8263,6 +8263,12 @@ public class NativeCodegenBoxTestGenerated extends AbstractNativeCodegenBoxTest
|
||||
runTest("compiler/testData/codegen/box/coroutines/kt55494.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("kt56407.kt")
|
||||
public void testKt56407() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/coroutines/kt56407.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("lastExpressionIsLoop.kt")
|
||||
public void testLastExpressionIsLoop() throws Exception {
|
||||
|
||||
Generated
+5
@@ -6497,6 +6497,11 @@ public class IrCodegenBoxWasmTestGenerated extends AbstractIrCodegenBoxWasmTest
|
||||
runTest("compiler/testData/codegen/box/coroutines/kt55494.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("kt56407.kt")
|
||||
public void testKt56407() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/coroutines/kt56407.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("lastExpressionIsLoop.kt")
|
||||
public void testLastExpressionIsLoop() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/coroutines/lastExpressionIsLoop.kt");
|
||||
|
||||
Reference in New Issue
Block a user