aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2016-11-05 15:01:28 +0100
committerMartin Odersky <odersky@gmail.com>2016-11-05 15:01:36 +0100
commit9c821cb83ce6b6f566620432ef3b5d70f54c67d2 (patch)
tree323cecc1274e786ab66a9c2dc9c75d1dc81c2d8b
parenta55a2607c7376ed81141ef958d6a8eeaeea8fd72 (diff)
downloaddotty-9c821cb83ce6b6f566620432ef3b5d70f54c67d2.tar.gz
dotty-9c821cb83ce6b6f566620432ef3b5d70f54c67d2.tar.bz2
dotty-9c821cb83ce6b6f566620432ef3b5d70f54c67d2.zip
Fix #1640: Avoid applications with untyped function parts
Avoid applications with untyped function parts even if program is erroneous. Taking the symbol fails for these applications, which can cause crashes.
-rw-r--r--src/dotty/tools/dotc/typer/Applications.scala2
-rw-r--r--tests/neg/i1640.scala4
2 files changed, 5 insertions, 1 deletions
diff --git a/src/dotty/tools/dotc/typer/Applications.scala b/src/dotty/tools/dotc/typer/Applications.scala
index 56595a637..6c398cd72 100644
--- a/src/dotty/tools/dotc/typer/Applications.scala
+++ b/src/dotty/tools/dotc/typer/Applications.scala
@@ -591,7 +591,7 @@ trait Applications extends Compatibility { self: Typer with Dynamic =>
}
fun1.tpe match {
- case ErrorType => tree.withType(ErrorType)
+ case ErrorType => untpd.cpy.Apply(tree)(fun1, tree.args).withType(ErrorType)
case TryDynamicCallType => typedDynamicApply(tree, pt)
case _ =>
tryEither {
diff --git a/tests/neg/i1640.scala b/tests/neg/i1640.scala
new file mode 100644
index 000000000..78351a1d6
--- /dev/null
+++ b/tests/neg/i1640.scala
@@ -0,0 +1,4 @@
+object Test extends App {
+ List(1, 2, 3) map (_ match { case x => x + 1 })
+ List((1, 2)) x (_ match { case (x, z) => x + z }) // error
+}