JVM_IR KT-43721 coerce intrinsic result to corresponding unsigned type

This commit is contained in:
Dmitry Petrov
2020-12-03 14:15:04 +03:00
parent c776fcbd00
commit caea0a9df0
17 changed files with 403 additions and 4 deletions
@@ -0,0 +1,14 @@
// TARGET_BACKEND: JVM
// WITH_RUNTIME
// JVM_TARGET: 1.8
val ua = 1234U
val ub = 5678U
fun box(): String {
if (ua.compareTo(ub) > 0) {
throw AssertionError()
}
return "OK"
}
@@ -0,0 +1,14 @@
// TARGET_BACKEND: JVM
// WITH_RUNTIME
// JVM_TARGET: 1.8
val ua = 1234U
val ub = 5678U
val u = ua * ub
fun box(): String {
val div = u / ua
if (div != ub) throw AssertionError("$div")
return "OK"
}
@@ -0,0 +1,15 @@
// TARGET_BACKEND: JVM
// WITH_RUNTIME
// JVM_TARGET: 1.8
val ua = 1234U
val ub = 5678U
val uc = 3456U
val u = ua * ub + uc
fun box(): String {
val rem = u % ub
if (rem != uc) throw AssertionError("$rem")
return "OK"
}
@@ -0,0 +1,16 @@
// TARGET_BACKEND: JVM
// WITH_RUNTIME
// JVM_TARGET: 1.8
fun box(): String {
val min = 0U.toString()
if ("0" != min) throw AssertionError(min)
val middle = 2_147_483_647U.toString()
if ("2147483647" != middle) throw AssertionError(middle)
val max = 4_294_967_295U.toString()
if ("4294967295" != max) throw AssertionError(max)
return "OK"
}
@@ -0,0 +1,14 @@
// TARGET_BACKEND: JVM
// WITH_RUNTIME
// JVM_TARGET: 1.8
val ua = 1234UL
val ub = 5678UL
fun box(): String {
if (ua.compareTo(ub) > 0) {
throw AssertionError()
}
return "OK"
}
@@ -0,0 +1,18 @@
// TARGET_BACKEND: JVM
// WITH_RUNTIME
// JVM_TARGET: 1.8
val ua = 1234UL
val ub = 5678UL
val uai = ua.toUInt()
val u = ua * ub
fun box(): String {
val div = u / ua
if (div != ub) throw AssertionError("$div")
val divInt = u / uai
if (div != ub) throw AssertionError("$div")
return "OK"
}
@@ -0,0 +1,15 @@
// TARGET_BACKEND: JVM
// WITH_RUNTIME
// JVM_TARGET: 1.8
val ua = 1234UL
val ub = 5678UL
val uc = 3456UL
val u = ua * ub + uc
fun box(): String {
val rem = u % ub
if (rem != uc) throw AssertionError("$rem")
return "OK"
}
@@ -0,0 +1,16 @@
// TARGET_BACKEND: JVM
// WITH_RUNTIME
// JVM_TARGET: 1.8
fun box(): String {
val min = 0UL.toString()
if ("0" != min) throw AssertionError(min)
val middle = 9_223_372_036_854_775_807UL.toString()
if ("9223372036854775807" != middle) throw AssertionError(middle)
val max = 18_446_744_073_709_551_615UL.toString()
if ("18446744073709551615" != max) throw AssertionError(max)
return "OK"
}