WASM: Enable exception handling tests
This commit is contained in:
committed by
TeamCityServer
parent
ef2970a888
commit
00f61978b8
@@ -1,6 +1,3 @@
|
||||
// DONT_TARGET_EXACT_BACKEND: WASM
|
||||
// Doesn't fail on WASM backend if lambdas return Int. Need to investigate futher.
|
||||
// WASM_MUTE_REASON: UNIT_ISSUES
|
||||
// !LANGUAGE: +UseCorrectExecutionOrderForVarargArguments
|
||||
// WITH_RUNTIME
|
||||
// KJS_WITH_FULL_RUNTIME
|
||||
|
||||
+3
-2
@@ -1,10 +1,11 @@
|
||||
// DONT_TARGET_EXACT_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: EXCEPTIONS_NOT_IMPLEMENTED
|
||||
// IGNORE_BACKEND: JS_IR
|
||||
// IGNORE_BACKEND: JS_IR_ES6
|
||||
// TODO: muted automatically, investigate should it be ran for JS or not
|
||||
// IGNORE_BACKEND: JS
|
||||
|
||||
// On Wasm we don't currently have ArrayIndexOutOfBoundsException
|
||||
// IGNORE_BACKEND: WASM
|
||||
|
||||
fun iarr(vararg a : Int) = a
|
||||
fun <T> array(vararg a : T) = a
|
||||
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
// DONT_TARGET_EXACT_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: EXCEPTIONS_NOT_IMPLEMENTED
|
||||
// IGNORE_BACKEND: JS_IR
|
||||
// IGNORE_BACKEND: JS_IR_ES6
|
||||
// IGNORE_BACKEND: JS
|
||||
// reason - no error from division by zero in JS
|
||||
// IGNORE_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: IGNORED_IN_JS
|
||||
// reason - no error from division by zero in JS or WASM
|
||||
|
||||
fun expectFail(f: () -> Unit): Nothing? {
|
||||
try {
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
// DONT_TARGET_EXACT_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: EXCEPTIONS_NOT_IMPLEMENTED
|
||||
|
||||
fun box() : String {
|
||||
try {
|
||||
return "OK"
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
// DONT_TARGET_EXACT_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: EXCEPTIONS_NOT_IMPLEMENTED
|
||||
|
||||
// KT-3985
|
||||
|
||||
interface Trait<T> {
|
||||
|
||||
+1
-2
@@ -1,5 +1,4 @@
|
||||
// DONT_TARGET_EXACT_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: EXCEPTIONS_NOT_IMPLEMENTED
|
||||
|
||||
fun <T> castToString(t: T) {
|
||||
t as String
|
||||
}
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
// DONT_TARGET_EXACT_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: EXCEPTIONS_NOT_IMPLEMENTED
|
||||
// KJS_WITH_FULL_RUNTIME
|
||||
// WITH_RUNTIME
|
||||
|
||||
// IGNORE_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: STDLIB_COLLECTIONS
|
||||
|
||||
class Itr : Iterator<String> by ArrayList<String>().iterator()
|
||||
class MItr : MutableIterator<String> by ArrayList<String>().iterator()
|
||||
class LItr : ListIterator<String> by ArrayList<String>().listIterator()
|
||||
|
||||
+3
-2
@@ -1,8 +1,9 @@
|
||||
// DONT_TARGET_EXACT_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: EXCEPTIONS_NOT_IMPLEMENTED
|
||||
// KJS_WITH_FULL_RUNTIME
|
||||
// WITH_RUNTIME
|
||||
|
||||
// IGNORE_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: STDLIB_COLLECTIONS
|
||||
|
||||
class Itr : Iterator<String> by ArrayList<String>().iterator()
|
||||
class MItr : MutableIterator<String> by ArrayList<String>().iterator()
|
||||
class LItr : ListIterator<String> by ArrayList<String>().listIterator()
|
||||
|
||||
+3
-2
@@ -1,8 +1,9 @@
|
||||
// DONT_TARGET_EXACT_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: EXCEPTIONS_NOT_IMPLEMENTED
|
||||
// KJS_WITH_FULL_RUNTIME
|
||||
// WITH_RUNTIME
|
||||
|
||||
// IGNORE_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: STDLIB_COLLECTIONS
|
||||
|
||||
class Itr : Iterator<String> by ArrayList<String>().iterator()
|
||||
class MItr : MutableIterator<String> by ArrayList<String>().iterator()
|
||||
class LItr : ListIterator<String> by ArrayList<String>().listIterator()
|
||||
|
||||
+3
-2
@@ -1,8 +1,9 @@
|
||||
// DONT_TARGET_EXACT_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: EXCEPTIONS_NOT_IMPLEMENTED
|
||||
// KJS_WITH_FULL_RUNTIME
|
||||
// WITH_RUNTIME
|
||||
|
||||
// IGNORE_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: STDLIB_COLLECTIONS
|
||||
|
||||
class Itr : Iterator<String> by ArrayList<String>().iterator()
|
||||
class MItr : MutableIterator<String> by ArrayList<String>().iterator()
|
||||
class LItr : ListIterator<String> by ArrayList<String>().listIterator()
|
||||
|
||||
+1
-2
@@ -1,5 +1,4 @@
|
||||
// DONT_TARGET_EXACT_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: EXCEPTIONS_NOT_IMPLEMENTED
|
||||
|
||||
fun test1() : Boolean {
|
||||
try {
|
||||
return true
|
||||
|
||||
+1
-2
@@ -1,5 +1,4 @@
|
||||
// DONT_TARGET_EXACT_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: EXCEPTIONS_NOT_IMPLEMENTED
|
||||
|
||||
var GUEST_USER_ID = 3
|
||||
val USER_ID =
|
||||
try {
|
||||
|
||||
+1
-2
@@ -1,5 +1,4 @@
|
||||
// DONT_TARGET_EXACT_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: EXCEPTIONS_NOT_IMPLEMENTED
|
||||
|
||||
class Reluctant() {
|
||||
init {
|
||||
throw Exception("I'm not coming out")
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
// DONT_TARGET_EXACT_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: EXCEPTIONS_NOT_IMPLEMENTED
|
||||
|
||||
//WITH_RUNTIME
|
||||
class Test {
|
||||
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
// DONT_TARGET_EXACT_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: EXCEPTIONS_NOT_IMPLEMENTED
|
||||
|
||||
// This test checks that bytecode optimizer doesn't crash on unreachable code.
|
||||
|
||||
fun box(): String {
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
// DONT_TARGET_EXACT_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: EXCEPTIONS_NOT_IMPLEMENTED
|
||||
// IGNORE_BACKEND: JS_IR
|
||||
// IGNORE_BACKEND: JS_IR_ES6
|
||||
// IGNORE_BACKEND: JS
|
||||
// IGNORE_BACKEND: WASM
|
||||
// reason - no error from division by zero in JS
|
||||
// in wasm we just trap
|
||||
// WASM_MUTE_REASON: IGNORED_IN_JS
|
||||
|
||||
fun expectArithmeticException(f: () -> Unit): Boolean {
|
||||
try {
|
||||
|
||||
Vendored
+1
-2
@@ -1,5 +1,4 @@
|
||||
// DONT_TARGET_EXACT_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: EXCEPTIONS_NOT_IMPLEMENTED
|
||||
|
||||
fun box(): String {
|
||||
OUTER@while (true) {
|
||||
var x = ""
|
||||
|
||||
+1
-2
@@ -1,5 +1,4 @@
|
||||
// DONT_TARGET_EXACT_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: EXCEPTIONS_NOT_IMPLEMENTED
|
||||
|
||||
fun foo(x: Long, y: Int, z: Double, s: String) {}
|
||||
|
||||
fun box(): String {
|
||||
|
||||
+1
-2
@@ -1,5 +1,4 @@
|
||||
// DONT_TARGET_EXACT_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: EXCEPTIONS_NOT_IMPLEMENTED
|
||||
|
||||
fun box(): String {
|
||||
var x = "OK"
|
||||
while (true) {
|
||||
|
||||
+1
-2
@@ -1,5 +1,4 @@
|
||||
// DONT_TARGET_EXACT_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: EXCEPTIONS_NOT_IMPLEMENTED
|
||||
|
||||
fun box(): String {
|
||||
var r = ""
|
||||
for (i in 1..1) {
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
// DONT_TARGET_EXACT_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: EXCEPTIONS_NOT_IMPLEMENTED
|
||||
|
||||
fun box(): String {
|
||||
while (true) {
|
||||
try {
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
// DONT_TARGET_EXACT_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: EXCEPTIONS_NOT_IMPLEMENTED
|
||||
|
||||
var result = "Fail"
|
||||
|
||||
fun foo() {
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
// DONT_TARGET_EXACT_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: EXCEPTIONS_NOT_IMPLEMENTED
|
||||
|
||||
fun box(): String {
|
||||
try {
|
||||
} catch (e: Exception) {
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
// DONT_TARGET_EXACT_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: EXCEPTIONS_NOT_IMPLEMENTED
|
||||
|
||||
|
||||
fun nyCompiler() {
|
||||
try {
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
// DONT_TARGET_EXACT_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: EXCEPTIONS_NOT_IMPLEMENTED
|
||||
|
||||
fun box(): String {
|
||||
var s = ""
|
||||
try {
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
// DONT_TARGET_EXACT_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: EXCEPTIONS_NOT_IMPLEMENTED
|
||||
|
||||
fun foo(args: Array<String>) {
|
||||
try {
|
||||
} finally {
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
// DONT_TARGET_EXACT_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: EXCEPTIONS_NOT_IMPLEMENTED
|
||||
|
||||
fun foo(): Int {
|
||||
try {
|
||||
} finally {
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
// DONT_TARGET_EXACT_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: EXCEPTIONS_NOT_IMPLEMENTED
|
||||
|
||||
class A() {
|
||||
fun action() = "OK"
|
||||
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
// DONT_TARGET_EXACT_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: EXCEPTIONS_NOT_IMPLEMENTED
|
||||
|
||||
class A(var value: String)
|
||||
|
||||
fun box(): String {
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
// DONT_TARGET_EXACT_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: EXCEPTIONS_NOT_IMPLEMENTED
|
||||
|
||||
class A(var value: String)
|
||||
|
||||
fun box(): String {
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
// DONT_TARGET_EXACT_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: EXCEPTIONS_NOT_IMPLEMENTED
|
||||
|
||||
class A(var value: String)
|
||||
|
||||
fun box(): String {
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
// DONT_TARGET_EXACT_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: EXCEPTIONS_NOT_IMPLEMENTED
|
||||
// KJS_WITH_FULL_RUNTIME
|
||||
|
||||
// IGNORE_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: STDLIB_COLLECTIONS
|
||||
|
||||
fun foo() : Int =
|
||||
try {
|
||||
2
|
||||
|
||||
+1
-2
@@ -1,5 +1,4 @@
|
||||
// DONT_TARGET_EXACT_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: EXCEPTIONS_NOT_IMPLEMENTED
|
||||
|
||||
inline fun exit(): Nothing = null!!
|
||||
|
||||
fun box(): String {
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
// DONT_TARGET_EXACT_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: EXCEPTIONS_NOT_IMPLEMENTED
|
||||
|
||||
fun exit(): Nothing = null!!
|
||||
|
||||
fun box(): String {
|
||||
|
||||
@@ -1,5 +1,3 @@
|
||||
// IGNORE_BACKEND: WASM
|
||||
|
||||
var log = ""
|
||||
|
||||
fun foo() {
|
||||
|
||||
@@ -1,5 +1,3 @@
|
||||
// IGNORE_BACKEND: WASM
|
||||
|
||||
var log = ""
|
||||
|
||||
fun foo() {
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
// DONT_TARGET_EXACT_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: EXCEPTIONS_NOT_IMPLEMENTED
|
||||
|
||||
fun box() : String {
|
||||
try {
|
||||
} finally {
|
||||
|
||||
+1
-2
@@ -1,4 +1,3 @@
|
||||
// DONT_TARGET_EXACT_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: EXCEPTIONS_NOT_IMPLEMENTED
|
||||
|
||||
fun box(): String =
|
||||
"O" + try { throw Exception("oops!") } catch (e: Exception) { "K" }
|
||||
+1
-2
@@ -1,5 +1,4 @@
|
||||
// DONT_TARGET_EXACT_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: EXCEPTIONS_NOT_IMPLEMENTED
|
||||
|
||||
fun cleanup() {}
|
||||
|
||||
inline fun concat(x: String, y: String): String = x + y
|
||||
|
||||
+1
-2
@@ -1,5 +1,4 @@
|
||||
// DONT_TARGET_EXACT_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: EXCEPTIONS_NOT_IMPLEMENTED
|
||||
|
||||
inline fun catchAll(x: String, block: () -> Unit): String {
|
||||
try {
|
||||
block()
|
||||
|
||||
+1
-2
@@ -1,5 +1,4 @@
|
||||
// DONT_TARGET_EXACT_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: EXCEPTIONS_NOT_IMPLEMENTED
|
||||
|
||||
// IGNORE_BACKEND: JS_IR
|
||||
// IGNORE_BACKEND: JS_IR_ES6
|
||||
// TODO: muted automatically, investigate should it be ran for JS or not
|
||||
|
||||
+1
-2
@@ -1,5 +1,4 @@
|
||||
// DONT_TARGET_EXACT_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: EXCEPTIONS_NOT_IMPLEMENTED
|
||||
|
||||
public inline fun fails(block: () -> Unit): Throwable? {
|
||||
var thrown: Throwable? = null
|
||||
try {
|
||||
|
||||
+1
-2
@@ -1,5 +1,4 @@
|
||||
// DONT_TARGET_EXACT_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: EXCEPTIONS_NOT_IMPLEMENTED
|
||||
|
||||
inline fun <T> tryOrElse(f1: () -> T, f2: () -> T): T {
|
||||
try {
|
||||
return f1()
|
||||
|
||||
+1
-2
@@ -1,5 +1,4 @@
|
||||
// DONT_TARGET_EXACT_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: EXCEPTIONS_NOT_IMPLEMENTED
|
||||
|
||||
inline fun <T> tryOrElse(f1: () -> T, f2: () -> T): T =
|
||||
try { f1() } catch (e: Exception) { f2() }
|
||||
|
||||
|
||||
+1
-2
@@ -1,5 +1,4 @@
|
||||
// DONT_TARGET_EXACT_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: EXCEPTIONS_NOT_IMPLEMENTED
|
||||
|
||||
inline fun <T> tryAndThen(f1: () -> Unit, f2: () -> Unit, f3: () -> T): T {
|
||||
try {
|
||||
f1()
|
||||
|
||||
+1
-2
@@ -1,5 +1,4 @@
|
||||
// DONT_TARGET_EXACT_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: EXCEPTIONS_NOT_IMPLEMENTED
|
||||
|
||||
fun zap(s: String) = s
|
||||
|
||||
inline fun tryZap(string: String, fn: (String) -> String) =
|
||||
|
||||
+1
-2
@@ -1,5 +1,4 @@
|
||||
// DONT_TARGET_EXACT_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: EXCEPTIONS_NOT_IMPLEMENTED
|
||||
|
||||
fun zap(s: String) = s
|
||||
|
||||
inline fun tryZap(s1: String, s2: String, fn: (String, String) -> String) =
|
||||
|
||||
+1
-2
@@ -1,5 +1,4 @@
|
||||
// DONT_TARGET_EXACT_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: EXCEPTIONS_NOT_IMPLEMENTED
|
||||
|
||||
fun zap(s: String) = s
|
||||
|
||||
inline fun tryZap(s1: String, s2: String, fn: String.(String) -> String) =
|
||||
|
||||
+1
-2
@@ -1,5 +1,4 @@
|
||||
// DONT_TARGET_EXACT_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: EXCEPTIONS_NOT_IMPLEMENTED
|
||||
|
||||
fun zap(s: String) = s
|
||||
|
||||
inline fun tryZap(string: String, fn: String.() -> String) =
|
||||
|
||||
+1
-2
@@ -1,5 +1,4 @@
|
||||
// DONT_TARGET_EXACT_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: EXCEPTIONS_NOT_IMPLEMENTED
|
||||
|
||||
fun zap(s: String) = s
|
||||
|
||||
inline fun tryZap(string: String, fn: (String) -> String) =
|
||||
|
||||
+1
-2
@@ -1,5 +1,4 @@
|
||||
// DONT_TARGET_EXACT_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: EXCEPTIONS_NOT_IMPLEMENTED
|
||||
|
||||
fun zap(s: String) = s
|
||||
|
||||
inline fun tryZap1(string: String, fn: (String) -> String) =
|
||||
|
||||
+1
-2
@@ -1,5 +1,4 @@
|
||||
// DONT_TARGET_EXACT_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: EXCEPTIONS_NOT_IMPLEMENTED
|
||||
|
||||
inline fun doCall(f: () -> Any) = f()
|
||||
|
||||
fun test1() {
|
||||
|
||||
Vendored
+1
-2
@@ -1,5 +1,4 @@
|
||||
// DONT_TARGET_EXACT_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: EXCEPTIONS_NOT_IMPLEMENTED
|
||||
|
||||
class Exception1(msg: String): Exception(msg)
|
||||
class Exception2(msg: String): Exception(msg)
|
||||
class Exception3(msg: String): Exception(msg)
|
||||
|
||||
+1
-2
@@ -1,5 +1,4 @@
|
||||
// DONT_TARGET_EXACT_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: EXCEPTIONS_NOT_IMPLEMENTED
|
||||
|
||||
inline fun test(s: () -> Int): Int =
|
||||
try {
|
||||
val i = s()
|
||||
|
||||
+1
-2
@@ -1,4 +1,3 @@
|
||||
// DONT_TARGET_EXACT_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: EXCEPTIONS_NOT_IMPLEMENTED
|
||||
|
||||
fun box(): String =
|
||||
"O" + try { "K" } catch (e: Exception) { "oops!" }
|
||||
+1
-2
@@ -1,5 +1,4 @@
|
||||
// DONT_TARGET_EXACT_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: EXCEPTIONS_NOT_IMPLEMENTED
|
||||
|
||||
fun box(): String =
|
||||
"" +
|
||||
try { "O" } catch (e: Exception) { "1" } +
|
||||
|
||||
+1
-2
@@ -1,5 +1,4 @@
|
||||
// DONT_TARGET_EXACT_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: EXCEPTIONS_NOT_IMPLEMENTED
|
||||
|
||||
fun idiv(a: Int, b: Int): Int =
|
||||
if (b == 0) throw Exception("Division by zero") else a / b
|
||||
|
||||
|
||||
+1
-2
@@ -1,5 +1,4 @@
|
||||
// DONT_TARGET_EXACT_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: EXCEPTIONS_NOT_IMPLEMENTED
|
||||
|
||||
fun idiv(a: Int, b: Int): Int =
|
||||
if (b == 0) throw Exception("Division by zero") else a / b
|
||||
|
||||
|
||||
Vendored
+3
@@ -1,5 +1,8 @@
|
||||
// KJS_WITH_FULL_RUNTIME
|
||||
// WITH_RUNTIME
|
||||
// DONT_TARGET_EXACT_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: STDLIB_COLLECTIONS
|
||||
|
||||
fun box(): String {
|
||||
val a = arrayListOf<String>()
|
||||
|
||||
|
||||
+1
-2
@@ -1,5 +1,4 @@
|
||||
// DONT_TARGET_EXACT_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: EXCEPTIONS_NOT_IMPLEMENTED
|
||||
|
||||
fun box(): String =
|
||||
"O" +
|
||||
try {
|
||||
|
||||
+1
-2
@@ -1,5 +1,4 @@
|
||||
// DONT_TARGET_EXACT_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: EXCEPTIONS_NOT_IMPLEMENTED
|
||||
|
||||
class MyException(message: String): Exception(message)
|
||||
|
||||
fun box(): String =
|
||||
|
||||
Vendored
+1
-2
@@ -1,5 +1,4 @@
|
||||
// DONT_TARGET_EXACT_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: EXCEPTIONS_NOT_IMPLEMENTED
|
||||
|
||||
inline fun catchAll(x: String, block: () -> Unit): String {
|
||||
try {
|
||||
block()
|
||||
|
||||
@@ -1,5 +1,3 @@
|
||||
// IGNORE_BACKEND: WASM
|
||||
|
||||
var log = ""
|
||||
|
||||
fun foo() {
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
// DONT_TARGET_EXACT_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: EXCEPTIONS_NOT_IMPLEMENTED
|
||||
// IGNORE_BACKEND: JS, JS_IR, NATIVE
|
||||
// IGNORE_BACKEND: JS, JS_IR, NATIVE, WASM
|
||||
// IGNORE_BACKEND: JS_IR_ES6
|
||||
// WASM_MUTE_REASON: IGNORED_IN_JS
|
||||
|
||||
fun f(
|
||||
f1: () -> String = { f2() },
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
// DONT_TARGET_EXACT_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: EXCEPTIONS_NOT_IMPLEMENTED
|
||||
|
||||
enum class Empty
|
||||
|
||||
fun box(): String {
|
||||
|
||||
+1
-2
@@ -1,5 +1,4 @@
|
||||
// DONT_TARGET_EXACT_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: EXCEPTIONS_NOT_IMPLEMENTED
|
||||
|
||||
enum class Color {
|
||||
RED,
|
||||
BLUE
|
||||
|
||||
+1
-2
@@ -1,5 +1,4 @@
|
||||
// DONT_TARGET_EXACT_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: EXCEPTIONS_NOT_IMPLEMENTED
|
||||
|
||||
fun <T> foo(t: T) {
|
||||
t!!
|
||||
}
|
||||
|
||||
@@ -1,5 +1,3 @@
|
||||
// IGNORE_BACKEND: WASM
|
||||
|
||||
fun test(): String {
|
||||
var exception: Throwable? = null
|
||||
val f = {
|
||||
|
||||
@@ -1,5 +1,3 @@
|
||||
// IGNORE_BACKEND: WASM
|
||||
|
||||
fun <T> id(t: T): T = t
|
||||
|
||||
fun test(b: Boolean): String {
|
||||
|
||||
+201
@@ -0,0 +1,201 @@
|
||||
// Tests that are inspired by the stack-related and verifier-related bugs in the wasm backend
|
||||
|
||||
// KJS_WITH_FULL_RUNTIME
|
||||
// WITH_RUNTIME
|
||||
|
||||
fun box(): String {
|
||||
if (!test1()) return "Fail 1"
|
||||
if (!test2()) return "Fail 2"
|
||||
if (!test3()) return "Fail 3"
|
||||
if (!test4()) return "Fail 4"
|
||||
if (!test5()) return "Fail 5"
|
||||
if (!test6()) return "Fail 6"
|
||||
if (!test7()) return "Fail 7"
|
||||
if (!test8()) return "Fail 8"
|
||||
return "OK"
|
||||
}
|
||||
|
||||
open class Foo: Throwable("") {}
|
||||
class Bar: Foo() {}
|
||||
class Baz: Foo() {}
|
||||
class Darb: Throwable("") {}
|
||||
|
||||
fun ooo() {
|
||||
throw Baz()
|
||||
}
|
||||
|
||||
fun zoot(): String {
|
||||
return "str"
|
||||
}
|
||||
|
||||
// Standard exception handling case without finally
|
||||
fun test1(): Boolean {
|
||||
try {
|
||||
ooo()
|
||||
} catch (b: Bar) {
|
||||
throw Darb()
|
||||
return false
|
||||
} catch (b: Baz) {
|
||||
return true
|
||||
} catch (b: Darb) {
|
||||
return false
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
// Standart case with finally
|
||||
fun test2(): Boolean {
|
||||
var catched = false
|
||||
|
||||
try {
|
||||
ooo()
|
||||
} catch (b: Bar) {
|
||||
throw Darb()
|
||||
return false
|
||||
} catch (b: Baz) {
|
||||
catched = true
|
||||
return false
|
||||
} catch (b: Darb) {
|
||||
return false
|
||||
} finally {
|
||||
return catched
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
|
||||
// Fallthrough with value on the stack (only needs to compile)
|
||||
fun test3(): Boolean {
|
||||
try {
|
||||
1
|
||||
} catch (e: Throwable) {
|
||||
2
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
// Fallthrough with value on the stack and finally
|
||||
fun test4(): Boolean {
|
||||
var seenFinally = false
|
||||
|
||||
try {
|
||||
ooo()
|
||||
2
|
||||
} catch (b: Throwable) {
|
||||
1
|
||||
} finally {
|
||||
seenFinally = true
|
||||
}
|
||||
|
||||
return seenFinally
|
||||
}
|
||||
|
||||
// Try with return value which is used later
|
||||
fun test5(): Boolean {
|
||||
val arg = try {
|
||||
ooo()
|
||||
1
|
||||
} catch (b: Baz) {
|
||||
3
|
||||
} catch (b: Darb) {
|
||||
4
|
||||
}
|
||||
|
||||
return arg == 3
|
||||
}
|
||||
|
||||
|
||||
// Case where catch uses labeled return which doesn't end the catch
|
||||
fun foo_for_test6(): String {
|
||||
var ret = ""
|
||||
|
||||
try {
|
||||
ooo()
|
||||
} catch (e: Throwable) {
|
||||
listOf(1, 2, 3, 4, 5).forEach {
|
||||
if (it == 3) return@forEach
|
||||
}
|
||||
ret += "O"
|
||||
} finally {
|
||||
ret += "K"
|
||||
}
|
||||
|
||||
return ret
|
||||
}
|
||||
|
||||
fun test6(): Boolean {
|
||||
return foo_for_test6() == "OK"
|
||||
}
|
||||
|
||||
// Catch is ended with the loop break into outer loop
|
||||
fun test7(): Boolean {
|
||||
var num_exc = 0
|
||||
var num_breaks = 0
|
||||
var num_finallies = 0
|
||||
var num_bodies = 0
|
||||
|
||||
loop@ for (i in 1..3) {
|
||||
for (j in 1..5) {
|
||||
try {
|
||||
ooo()
|
||||
} catch (e: Throwable) {
|
||||
++num_exc
|
||||
if (i == 2 || i == 4) {
|
||||
++num_breaks
|
||||
break@loop
|
||||
}
|
||||
} finally {
|
||||
++num_finallies
|
||||
}
|
||||
++num_bodies
|
||||
}
|
||||
}
|
||||
|
||||
if (num_exc == 6 && num_breaks == 1 && num_finallies == 6 && num_bodies == 5)
|
||||
return true
|
||||
return false
|
||||
}
|
||||
|
||||
// Finally throws an exception
|
||||
class Baobab: Throwable()
|
||||
class Zanzibar: Throwable()
|
||||
class Hypo(val catchedBaobab: Boolean, val thrownZanzibar: Boolean, val seenFinally: Boolean): Throwable()
|
||||
|
||||
fun golb() {
|
||||
throw Baobab()
|
||||
}
|
||||
|
||||
fun foo(i: Int) {
|
||||
var catchedBaobab = false
|
||||
var thrownZanzibar = false
|
||||
var seenFinally = false
|
||||
|
||||
try {
|
||||
golb()
|
||||
} catch (b: Baobab) {
|
||||
catchedBaobab = true
|
||||
if (i == 9) {
|
||||
thrownZanzibar = true
|
||||
throw Zanzibar()
|
||||
}
|
||||
} finally {
|
||||
seenFinally = true
|
||||
throw Hypo(catchedBaobab, thrownZanzibar, seenFinally)
|
||||
}
|
||||
}
|
||||
|
||||
fun test8(): Boolean {
|
||||
try {
|
||||
foo(9)
|
||||
} catch (z: Hypo) {
|
||||
if (z.catchedBaobab && z.seenFinally && z.thrownZanzibar)
|
||||
return true
|
||||
return false
|
||||
} catch (e: Throwable) {
|
||||
return false
|
||||
}
|
||||
return false
|
||||
}
|
||||
@@ -1,5 +1,4 @@
|
||||
// DONT_TARGET_EXACT_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: EXCEPTIONS_NOT_IMPLEMENTED
|
||||
|
||||
fun a(): IntArray? = null
|
||||
|
||||
fun b(): Nothing = throw Exception()
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
// DONT_TARGET_EXACT_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: EXCEPTIONS_NOT_IMPLEMENTED
|
||||
|
||||
fun a(): String? = null
|
||||
|
||||
fun b(): Nothing = throw Exception()
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
// DONT_TARGET_EXACT_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: EXCEPTIONS_NOT_IMPLEMENTED
|
||||
|
||||
//KT-3297 Calling the wrong function inside an extension method to the Function0 class
|
||||
|
||||
infix fun <R> Function0<R>.or(alt: () -> R): R {
|
||||
|
||||
+1
-2
@@ -1,5 +1,4 @@
|
||||
// DONT_TARGET_EXACT_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: EXCEPTIONS_NOT_IMPLEMENTED
|
||||
|
||||
fun test(): () -> Throwable {
|
||||
return try {
|
||||
TODO()
|
||||
|
||||
+6
-2
@@ -1,6 +1,10 @@
|
||||
// DONT_TARGET_EXACT_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: EXCEPTIONS_NOT_IMPLEMENTED
|
||||
// WITH_RUNTIME
|
||||
|
||||
// IGNORE_BACKEND: WASM
|
||||
// Result::getOrNull contains cast (value as T). It gets inlined but type parameter is not updated. We loose information that it was
|
||||
// a String and instead we treat it as Any. We then fail to assign it into temporary variable of type String?.
|
||||
// WASM_MUTE_REASON: TYPE_ISSUES
|
||||
|
||||
fun f1(): () -> Result<String> {
|
||||
return {
|
||||
runCatching {
|
||||
|
||||
+6
-2
@@ -1,6 +1,10 @@
|
||||
// DONT_TARGET_EXACT_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: EXCEPTIONS_NOT_IMPLEMENTED
|
||||
// WITH_RUNTIME
|
||||
|
||||
// IGNORE_BACKEND: WASM
|
||||
// Result::getOrNull contains cast (value as T). It gets inlined but type parameter is not updated. We loose information that it was
|
||||
// a String and instead we treat it as Any. We then fail to assign it into temporary variable of type String?.
|
||||
// WASM_MUTE_REASON: TYPE_ISSUES
|
||||
|
||||
fun f1() = lazy {
|
||||
runCatching {
|
||||
"OK"
|
||||
|
||||
+1
-2
@@ -1,5 +1,4 @@
|
||||
// DONT_TARGET_EXACT_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: EXCEPTIONS_NOT_IMPLEMENTED
|
||||
|
||||
// !LANGUAGE: +InlineClasses
|
||||
|
||||
inline class Inner(val x: Int)
|
||||
|
||||
+1
-2
@@ -1,5 +1,4 @@
|
||||
// DONT_TARGET_EXACT_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: EXCEPTIONS_NOT_IMPLEMENTED
|
||||
|
||||
// !LANGUAGE: +InlineClasses
|
||||
|
||||
inline class A(val x: String = "")
|
||||
|
||||
+1
-2
@@ -1,5 +1,4 @@
|
||||
// DONT_TARGET_EXACT_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: EXCEPTIONS_NOT_IMPLEMENTED
|
||||
|
||||
// !LANGUAGE: +InlineClasses
|
||||
|
||||
inline class A(val x: Any? = null)
|
||||
|
||||
+1
-2
@@ -1,5 +1,4 @@
|
||||
// DONT_TARGET_EXACT_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: EXCEPTIONS_NOT_IMPLEMENTED
|
||||
|
||||
// !LANGUAGE: +InlineClasses
|
||||
|
||||
inline class A(val x: Int = 0)
|
||||
|
||||
+3
-3
@@ -1,10 +1,10 @@
|
||||
// DONT_TARGET_EXACT_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: EXCEPTIONS_NOT_IMPLEMENTED
|
||||
|
||||
// !LANGUAGE: +InlineClasses
|
||||
// IGNORE_BACKEND: JS, JS_IR
|
||||
// IGNORE_BACKEND: JS, JS_IR, WASM
|
||||
// IGNORE_BACKEND: JS_IR_ES6
|
||||
// FULL_JDK
|
||||
// WITH_RUNTIME
|
||||
// WASM_MUTE_REASON: IGNORED_IN_JS
|
||||
|
||||
inline class Id(val id: String)
|
||||
|
||||
|
||||
+1
-2
@@ -1,5 +1,4 @@
|
||||
// DONT_TARGET_EXACT_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: EXCEPTIONS_NOT_IMPLEMENTED
|
||||
|
||||
// !LANGUAGE: +InlineClasses
|
||||
|
||||
inline class Result<out T>(val value: Any?) {
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
// DONT_TARGET_EXACT_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: EXCEPTIONS_NOT_IMPLEMENTED
|
||||
// IGNORE_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: TYPE_ISSUES
|
||||
|
||||
inline class Result<out T>(val value: Any?) {
|
||||
fun exceptionOrNull(): Throwable? =
|
||||
when (value) {
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
// DONT_TARGET_EXACT_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: EXCEPTIONS_NOT_IMPLEMENTED
|
||||
// WITH_RUNTIME
|
||||
// KJS_WITH_FULL_RUNTIME
|
||||
|
||||
// IGNORE_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: STDLIB_TEXT
|
||||
|
||||
fun box(): String {
|
||||
try {
|
||||
"a b c".trimMargin(" ")
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
// DONT_TARGET_EXACT_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: EXCEPTIONS_NOT_IMPLEMENTED
|
||||
|
||||
class A(val p: String) {
|
||||
val prop: String = throw RuntimeException()
|
||||
}
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
// DONT_TARGET_EXACT_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: EXCEPTIONS_NOT_IMPLEMENTED
|
||||
|
||||
class A {
|
||||
val p : Int = try{
|
||||
1
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
// DONT_TARGET_EXACT_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: EXCEPTIONS_NOT_IMPLEMENTED
|
||||
// IGNORE_BACKEND: JS
|
||||
|
||||
// IGNORE_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: REFLECTION
|
||||
|
||||
fun <T> something(): T = Any() as T
|
||||
|
||||
class Context<T>
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
// DONT_TARGET_EXACT_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: EXCEPTIONS_NOT_IMPLEMENTED
|
||||
|
||||
package foo
|
||||
|
||||
fun box(): String {
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
// DONT_TARGET_EXACT_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: EXCEPTIONS_NOT_IMPLEMENTED
|
||||
|
||||
fun box(): String {
|
||||
try {
|
||||
if ((null as Int?)!! == 10) return "Fail #1"
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
// DONT_TARGET_EXACT_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: EXCEPTIONS_NOT_IMPLEMENTED
|
||||
|
||||
public class A {
|
||||
fun getFromClass(): Boolean {
|
||||
try {
|
||||
|
||||
+1
-2
@@ -1,5 +1,4 @@
|
||||
// DONT_TARGET_EXACT_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: EXCEPTIONS_NOT_IMPLEMENTED
|
||||
|
||||
fun <T> eval(fn: () -> T) = fn()
|
||||
|
||||
public class A {
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
// DONT_TARGET_EXACT_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: EXCEPTIONS_NOT_IMPLEMENTED
|
||||
|
||||
class A {
|
||||
private lateinit var str: String
|
||||
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
// DONT_TARGET_EXACT_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: EXCEPTIONS_NOT_IMPLEMENTED
|
||||
|
||||
class A {
|
||||
public lateinit var str: String
|
||||
}
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
// DONT_TARGET_EXACT_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: EXCEPTIONS_NOT_IMPLEMENTED
|
||||
|
||||
// IGNORE_BACKEND: JVM
|
||||
|
||||
class Test {
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
// DONT_TARGET_EXACT_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: EXCEPTIONS_NOT_IMPLEMENTED
|
||||
// KJS_WITH_FULL_RUNTIME
|
||||
// WITH_RUNTIME
|
||||
|
||||
// IGNORE_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: REFLECTION
|
||||
|
||||
fun box(): String {
|
||||
lateinit var str: String
|
||||
try {
|
||||
|
||||
Vendored
+3
-2
@@ -1,7 +1,8 @@
|
||||
// DONT_TARGET_EXACT_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: EXCEPTIONS_NOT_IMPLEMENTED
|
||||
// WITH_RUNTIME
|
||||
|
||||
// IGNORE_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: REFLECTION
|
||||
|
||||
import kotlin.UninitializedPropertyAccessException
|
||||
|
||||
fun runNoInline(f: () -> Unit) = f()
|
||||
|
||||
+3
-2
@@ -1,7 +1,8 @@
|
||||
// DONT_TARGET_EXACT_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: EXCEPTIONS_NOT_IMPLEMENTED
|
||||
// WITH_RUNTIME
|
||||
|
||||
// IGNORE_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: REFLECTION
|
||||
|
||||
import kotlin.UninitializedPropertyAccessException
|
||||
|
||||
fun runNoInline(f: () -> Unit) = f()
|
||||
|
||||
+3
-2
@@ -1,7 +1,8 @@
|
||||
// DONT_TARGET_EXACT_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: EXCEPTIONS_NOT_IMPLEMENTED
|
||||
// WITH_RUNTIME
|
||||
|
||||
// IGNORE_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: REFLECTION
|
||||
|
||||
import kotlin.UninitializedPropertyAccessException
|
||||
|
||||
fun box(): String {
|
||||
|
||||
+3
-2
@@ -1,7 +1,8 @@
|
||||
// DONT_TARGET_EXACT_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: EXCEPTIONS_NOT_IMPLEMENTED
|
||||
// WITH_RUNTIME
|
||||
|
||||
// IGNORE_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: REFLECTION
|
||||
|
||||
import kotlin.UninitializedPropertyAccessException
|
||||
|
||||
fun box(): String {
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
// DONT_TARGET_EXACT_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: EXCEPTIONS_NOT_IMPLEMENTED
|
||||
|
||||
// WITH_RUNTIME
|
||||
|
||||
import kotlin.UninitializedPropertyAccessException
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user