Skip to content

Commit e0a11cd

Browse files
committed
Harden NamedTuple handling against ill-formed NamedTuples
1 parent bd9bb8a commit e0a11cd

File tree

2 files changed

+8
-0
lines changed

2 files changed

+8
-0
lines changed

compiler/src/dotty/tools/dotc/core/TypeUtils.scala

+1
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,7 @@ class TypeUtils {
124124
case defn.NamedTuple(nmes, vals) =>
125125
val names = nmes.tupleElementTypesUpTo(bound, normalize).getOrElse(Nil).map:
126126
case ConstantType(Constant(str: String)) => str.toTermName
127+
case t => throw TypeError(em"Malformed NamedTuple: names must be string types, but $t was found.")
127128
val values = vals.tupleElementTypesUpTo(bound, normalize).getOrElse(Nil)
128129
names.zip(values)
129130
case t =>

tests/neg/named-tuples-3.scala

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import language.experimental.namedTuples
2+
3+
def f: NamedTuple.NamedTuple[(Int, Any), (Int, String)] = ??? // error
4+
5+
type Person = (name: Int, age: String)
6+
7+
val p: Person = f

0 commit comments

Comments
 (0)