Add regression tests for KT-46890 and other stuff

This commit is contained in:
pyos
2021-06-02 15:30:13 +02:00
committed by teamcityserver
parent ada4c48eba
commit d5d3d9f112
15 changed files with 428 additions and 4 deletions
@@ -20196,6 +20196,52 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT
}
}
@Nested
@TestMetadata("compiler/testData/codegen/box/inlineClasses/result")
@TestDataPath("$PROJECT_ROOT")
public class Result {
@Test
public void testAllFilesPresentInResult() throws Exception {
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/inlineClasses/result"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JVM_IR, true);
}
@Test
@TestMetadata("directCall1.kt")
public void testDirectCall1() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/result/directCall1.kt");
}
@Test
@TestMetadata("directCall2.kt")
public void testDirectCall2() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/result/directCall2.kt");
}
@Test
@TestMetadata("doubleOverride.kt")
public void testDoubleOverride() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/result/doubleOverride.kt");
}
@Test
@TestMetadata("extensionOverride.kt")
public void testExtensionOverride() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/result/extensionOverride.kt");
}
@Test
@TestMetadata("inlineMethodOnResult.kt")
public void testInlineMethodOnResult() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/result/inlineMethodOnResult.kt");
}
@Test
@TestMetadata("lambdaTakesResultThroughBridge.kt")
public void testLambdaTakesResultThroughBridge() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/result/lambdaTakesResultThroughBridge.kt");
}
}
@Nested
@TestMetadata("compiler/testData/codegen/box/inlineClasses/returnResult")
@TestDataPath("$PROJECT_ROOT")
@@ -677,10 +677,6 @@ class ExpressionCodegen(
return when {
// Only care about `Result<T>`; `Result<T>?` is boxed in any case.
type.erasedUpperBound.fqNameWhenAvailable != StandardNames.RESULT_FQ_NAME || type.isNullable() -> null
// In `SuspendLambda.invoke`, we take a boxed result and store it in a field of type `Any?` (or pass it
// to `create(Any?)`). Normally, we'd unbox here and the box at the store/call, but the boxing is elided
// by the hack in `PromisedValue.materializedAt`, and so we remove the unboxing as well. TODO: unhack this.
parentAsClass.origin == JvmLoweredDeclarationOrigin.SUSPEND_LAMBDA && name == OperatorNameConventions.INVOKE -> false
// If there's a bridge, it will unbox `Result` along with transforming all other arguments.
parentAsClass.declarations.any { function ->
function is IrSimpleFunction && function != this &&
@@ -0,0 +1,11 @@
// WITH_RUNTIME
// IGNORE_BACKEND: JVM, WASM
interface I<T> {
fun foo(x: T): T
}
class C : I<Result<Any?>> {
override fun foo(x: Result<Any?>) = x
}
fun box() = C().foo(Result.success("OK")).getOrNull()
@@ -0,0 +1,13 @@
// WITH_RUNTIME
// IGNORE_BACKEND: JVM, WASM
interface I<T> {
fun foo(x: T): Any?
}
class C : I<Result<Any?>> {
override fun foo(x: Result<Any?>) = x.getOrNullNoinline()
}
fun <T> Result<T>.getOrNullNoinline() = getOrNull()
fun box() = C().foo(Result.success("OK"))
@@ -0,0 +1,19 @@
// WITH_RUNTIME
// IGNORE_BACKEND: JVM
interface C<T> {
abstract fun foo(x: T): String
}
open class D<T> : C<Result<T>> {
open override fun foo(x: Result<T>): String = "???"
}
class E : D<String>() {
override fun foo(x: Result<String>): String = x.get()
}
fun <T> Result<T>.get(): T = getOrNull()!!
fun <T> C<Result<T>>.bar(x: T) = foo(Result.success(x))
fun box() = E().bar("OK")
@@ -0,0 +1,14 @@
// WITH_RUNTIME
fun <T> Result<T>.get(): T = getOrNull()!!
interface C<T> {
abstract fun Result<T>.foo(): String
}
class D : C<String> {
override fun Result<String>.foo() = get()
}
fun <T> C<T>.bar(x: T) = Result.success(x).foo()
fun box() = D().bar("OK")
@@ -0,0 +1,11 @@
// WITH_RUNTIME
// IGNORE_BACKEND: WASM
interface I<T, V> {
fun foo(x: T): V
}
class C : I<Result<Any?>, Any?> {
override fun foo(x: Result<Any?>) = x.getOrNull()
}
fun box() = (C() as I<Result<Any?>, Any?>).foo(Result.success("OK"))
@@ -0,0 +1,7 @@
// WITH_RUNTIME
// IGNORE_BACKEND: WASM
fun <T> Result<T>.getOrNullNoinline() = getOrNull()
val x = { a: Int, b: Result<String> -> b.getOrNullNoinline() }
fun box() = x(1, Result.success("OK"))
@@ -20166,6 +20166,52 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
}
}
@Nested
@TestMetadata("compiler/testData/codegen/box/inlineClasses/result")
@TestDataPath("$PROJECT_ROOT")
public class Result {
@Test
public void testAllFilesPresentInResult() throws Exception {
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/inlineClasses/result"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JVM, true);
}
@Test
@TestMetadata("directCall1.kt")
public void testDirectCall1() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/result/directCall1.kt");
}
@Test
@TestMetadata("directCall2.kt")
public void testDirectCall2() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/result/directCall2.kt");
}
@Test
@TestMetadata("doubleOverride.kt")
public void testDoubleOverride() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/result/doubleOverride.kt");
}
@Test
@TestMetadata("extensionOverride.kt")
public void testExtensionOverride() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/result/extensionOverride.kt");
}
@Test
@TestMetadata("inlineMethodOnResult.kt")
public void testInlineMethodOnResult() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/result/inlineMethodOnResult.kt");
}
@Test
@TestMetadata("lambdaTakesResultThroughBridge.kt")
public void testLambdaTakesResultThroughBridge() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/result/lambdaTakesResultThroughBridge.kt");
}
}
@Nested
@TestMetadata("compiler/testData/codegen/box/inlineClasses/returnResult")
@TestDataPath("$PROJECT_ROOT")
@@ -20196,6 +20196,52 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes
}
}
@Nested
@TestMetadata("compiler/testData/codegen/box/inlineClasses/result")
@TestDataPath("$PROJECT_ROOT")
public class Result {
@Test
public void testAllFilesPresentInResult() throws Exception {
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/inlineClasses/result"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JVM_IR, true);
}
@Test
@TestMetadata("directCall1.kt")
public void testDirectCall1() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/result/directCall1.kt");
}
@Test
@TestMetadata("directCall2.kt")
public void testDirectCall2() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/result/directCall2.kt");
}
@Test
@TestMetadata("doubleOverride.kt")
public void testDoubleOverride() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/result/doubleOverride.kt");
}
@Test
@TestMetadata("extensionOverride.kt")
public void testExtensionOverride() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/result/extensionOverride.kt");
}
@Test
@TestMetadata("inlineMethodOnResult.kt")
public void testInlineMethodOnResult() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/result/inlineMethodOnResult.kt");
}
@Test
@TestMetadata("lambdaTakesResultThroughBridge.kt")
public void testLambdaTakesResultThroughBridge() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/result/lambdaTakesResultThroughBridge.kt");
}
}
@Nested
@TestMetadata("compiler/testData/codegen/box/inlineClasses/returnResult")
@TestDataPath("$PROJECT_ROOT")
@@ -16785,6 +16785,49 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes
}
}
@TestMetadata("compiler/testData/codegen/box/inlineClasses/result")
@TestDataPath("$PROJECT_ROOT")
@RunWith(JUnit3RunnerWithInners.class)
public static class Result extends AbstractLightAnalysisModeTest {
private void runTest(String testDataFilePath) throws Exception {
KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM, testDataFilePath);
}
public void testAllFilesPresentInResult() throws Exception {
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/inlineClasses/result"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JVM, true);
}
@TestMetadata("directCall1.kt")
public void testDirectCall1() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/result/directCall1.kt");
}
@TestMetadata("directCall2.kt")
public void testDirectCall2() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/result/directCall2.kt");
}
@TestMetadata("doubleOverride.kt")
public void testDoubleOverride() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/result/doubleOverride.kt");
}
@TestMetadata("extensionOverride.kt")
public void testExtensionOverride() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/result/extensionOverride.kt");
}
@TestMetadata("inlineMethodOnResult.kt")
public void testInlineMethodOnResult() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/result/inlineMethodOnResult.kt");
}
@TestMetadata("lambdaTakesResultThroughBridge.kt")
public void testLambdaTakesResultThroughBridge() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/result/lambdaTakesResultThroughBridge.kt");
}
}
@TestMetadata("compiler/testData/codegen/box/inlineClasses/returnResult")
@TestDataPath("$PROJECT_ROOT")
@RunWith(JUnit3RunnerWithInners.class)
@@ -14729,6 +14729,49 @@ public class IrJsCodegenBoxES6TestGenerated extends AbstractIrJsCodegenBoxES6Tes
}
}
@TestMetadata("compiler/testData/codegen/box/inlineClasses/result")
@TestDataPath("$PROJECT_ROOT")
@RunWith(JUnit3RunnerWithInners.class)
public static class Result extends AbstractIrJsCodegenBoxES6Test {
private void runTest(String testDataFilePath) throws Exception {
KotlinTestUtils.runTest0(this::doTest, TargetBackend.JS_IR_ES6, testDataFilePath);
}
public void testAllFilesPresentInResult() throws Exception {
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/inlineClasses/result"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JS_IR_ES6, true);
}
@TestMetadata("directCall1.kt")
public void testDirectCall1() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/result/directCall1.kt");
}
@TestMetadata("directCall2.kt")
public void testDirectCall2() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/result/directCall2.kt");
}
@TestMetadata("doubleOverride.kt")
public void testDoubleOverride() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/result/doubleOverride.kt");
}
@TestMetadata("extensionOverride.kt")
public void testExtensionOverride() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/result/extensionOverride.kt");
}
@TestMetadata("inlineMethodOnResult.kt")
public void testInlineMethodOnResult() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/result/inlineMethodOnResult.kt");
}
@TestMetadata("lambdaTakesResultThroughBridge.kt")
public void testLambdaTakesResultThroughBridge() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/result/lambdaTakesResultThroughBridge.kt");
}
}
@TestMetadata("compiler/testData/codegen/box/inlineClasses/returnResult")
@TestDataPath("$PROJECT_ROOT")
@RunWith(JUnit3RunnerWithInners.class)
@@ -14135,6 +14135,49 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest {
}
}
@TestMetadata("compiler/testData/codegen/box/inlineClasses/result")
@TestDataPath("$PROJECT_ROOT")
@RunWith(JUnit3RunnerWithInners.class)
public static class Result extends AbstractIrJsCodegenBoxTest {
private void runTest(String testDataFilePath) throws Exception {
KotlinTestUtils.runTest0(this::doTest, TargetBackend.JS_IR, testDataFilePath);
}
public void testAllFilesPresentInResult() throws Exception {
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/inlineClasses/result"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JS_IR, true);
}
@TestMetadata("directCall1.kt")
public void testDirectCall1() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/result/directCall1.kt");
}
@TestMetadata("directCall2.kt")
public void testDirectCall2() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/result/directCall2.kt");
}
@TestMetadata("doubleOverride.kt")
public void testDoubleOverride() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/result/doubleOverride.kt");
}
@TestMetadata("extensionOverride.kt")
public void testExtensionOverride() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/result/extensionOverride.kt");
}
@TestMetadata("inlineMethodOnResult.kt")
public void testInlineMethodOnResult() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/result/inlineMethodOnResult.kt");
}
@TestMetadata("lambdaTakesResultThroughBridge.kt")
public void testLambdaTakesResultThroughBridge() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/result/lambdaTakesResultThroughBridge.kt");
}
}
@TestMetadata("compiler/testData/codegen/box/inlineClasses/returnResult")
@TestDataPath("$PROJECT_ROOT")
@RunWith(JUnit3RunnerWithInners.class)
@@ -14200,6 +14200,49 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest {
}
}
@TestMetadata("compiler/testData/codegen/box/inlineClasses/result")
@TestDataPath("$PROJECT_ROOT")
@RunWith(JUnit3RunnerWithInners.class)
public static class Result extends AbstractJsCodegenBoxTest {
private void runTest(String testDataFilePath) throws Exception {
KotlinTestUtils.runTest0(this::doTest, TargetBackend.JS, testDataFilePath);
}
public void testAllFilesPresentInResult() throws Exception {
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/inlineClasses/result"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JS, true);
}
@TestMetadata("directCall1.kt")
public void testDirectCall1() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/result/directCall1.kt");
}
@TestMetadata("directCall2.kt")
public void testDirectCall2() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/result/directCall2.kt");
}
@TestMetadata("doubleOverride.kt")
public void testDoubleOverride() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/result/doubleOverride.kt");
}
@TestMetadata("extensionOverride.kt")
public void testExtensionOverride() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/result/extensionOverride.kt");
}
@TestMetadata("inlineMethodOnResult.kt")
public void testInlineMethodOnResult() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/result/inlineMethodOnResult.kt");
}
@TestMetadata("lambdaTakesResultThroughBridge.kt")
public void testLambdaTakesResultThroughBridge() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/result/lambdaTakesResultThroughBridge.kt");
}
}
@TestMetadata("compiler/testData/codegen/box/inlineClasses/returnResult")
@TestDataPath("$PROJECT_ROOT")
@RunWith(JUnit3RunnerWithInners.class)
@@ -8065,6 +8065,49 @@ public class IrCodegenBoxWasmTestGenerated extends AbstractIrCodegenBoxWasmTest
}
}
@TestMetadata("compiler/testData/codegen/box/inlineClasses/result")
@TestDataPath("$PROJECT_ROOT")
@RunWith(JUnit3RunnerWithInners.class)
public static class Result extends AbstractIrCodegenBoxWasmTest {
private void runTest(String testDataFilePath) throws Exception {
KotlinTestUtils.runTest0(this::doTest, TargetBackend.WASM, testDataFilePath);
}
public void testAllFilesPresentInResult() throws Exception {
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/inlineClasses/result"), Pattern.compile("^([^_](.+))\\.kt$"), null, TargetBackend.WASM, true);
}
@TestMetadata("directCall1.kt")
public void testDirectCall1() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/result/directCall1.kt");
}
@TestMetadata("directCall2.kt")
public void testDirectCall2() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/result/directCall2.kt");
}
@TestMetadata("doubleOverride.kt")
public void testDoubleOverride() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/result/doubleOverride.kt");
}
@TestMetadata("extensionOverride.kt")
public void testExtensionOverride() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/result/extensionOverride.kt");
}
@TestMetadata("inlineMethodOnResult.kt")
public void testInlineMethodOnResult() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/result/inlineMethodOnResult.kt");
}
@TestMetadata("lambdaTakesResultThroughBridge.kt")
public void testLambdaTakesResultThroughBridge() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/result/lambdaTakesResultThroughBridge.kt");
}
}
@TestMetadata("compiler/testData/codegen/box/inlineClasses/returnResult")
@TestDataPath("$PROJECT_ROOT")
@RunWith(JUnit3RunnerWithInners.class)