diff --git a/compiler/src/dotty/tools/dotc/typer/Typer.scala b/compiler/src/dotty/tools/dotc/typer/Typer.scala index 3aaf4fec59d6..fc1b90ea356d 100644 --- a/compiler/src/dotty/tools/dotc/typer/Typer.scala +++ b/compiler/src/dotty/tools/dotc/typer/Typer.scala @@ -4162,7 +4162,7 @@ class Typer(@constructorOnly nestingLevel: Int = 0) extends Namer || x.tag == LongTag && cls == defn.DoubleClass && x.longValue.toDouble.toLong != x.longValue then report.warning(LossyWideningConstantConversion(x.tpe, pt), tree.srcPos) - return adaptConstant(tree, ConstantType(converted)) + return readapt(adaptConstant(tree, ConstantType(converted))) case _ => val captured = captureWildcardsCompat(wtp, pt) diff --git a/tests/neg/i18340.scala b/tests/neg/i18340.scala new file mode 100644 index 000000000000..a16d506ee196 --- /dev/null +++ b/tests/neg/i18340.scala @@ -0,0 +1,36 @@ +@main def main: Unit = + type T = 3f + val value0: T = -3.5f // error + val value1: T = -100500 // error + val value2: T = -100500L // error + val value3: T = -100500D // error + val value4: T = true // error + val value5: 3f = -100500 // error + val value6: 3f = -100500L // error + + type Ti = 3 + val value1i: Ti = -100500 // error + val value2i: Ti = -100500L // error + val value0i: Ti = -100500F // error + val value3i: Ti = -100500D // error + val value4i: Ti = true // error + val value5i: 3 = -100500 // error + val value6i: 3 = -100500L // error + + type Tl = 3L + val value1l: Tl = -100500 // error + val value2l: Tl = -100500L // error + val value0l: Tl = -100500F // error + val value3l: Tl = -100500D // error + val value4l: Tl = true // error + val value5l: 3L = -100500 // error + val value6l: 3L = -100500L // error + + type Td = 3D + val value1d: Td = -100500 // error + val value2d: Td = -100500L // error + val value0d: Td = -100500F // error + val value3d: Td = -100500D // error + val value4d: Td = true // error + val value5d: 3D = -100500 // error + val value6d: 3D = -100500L // error