Skip to content

Commit

Permalink
Do not crash when typing a closure with unknown type, since it can oc…
Browse files Browse the repository at this point in the history
…cur for erroneous input (scala#21178)

closes scala#20511
  • Loading branch information
hamzaremmal authored Nov 19, 2024
2 parents 64a177f + 6e28679 commit 3a5e137
Show file tree
Hide file tree
Showing 5 changed files with 61 additions and 2 deletions.
2 changes: 0 additions & 2 deletions compiler/src/dotty/tools/dotc/typer/Typer.scala
Original file line number Diff line number Diff line change
Expand Up @@ -1998,8 +1998,6 @@ class Typer(@constructorOnly nestingLevel: Int = 0) extends Namer
// Polymorphic SAMs are not currently supported (#6904).
EmptyTree
case tp =>
if !tp.isErroneous then
throw new java.lang.Error(i"internal error: closing over non-method $tp, pos = ${tree.span}")
TypeTree(defn.AnyType)
}
else typed(tree.tpt)
Expand Down
32 changes: 32 additions & 0 deletions tests/neg/i20511-1.check
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
-- [E083] Type Error: tests/neg/i20511-1.scala:7:7 ---------------------------------------------------------------------
7 |export toppingPrice.apply, crustPrice.apply, crustPrice.unlift // error // error // error // error // error
| ^^^^^^^^^^^^
| Int => Double is not a valid export prefix, since it is not an immutable path
|
| longer explanation available when compiling with `-explain`
-- [E083] Type Error: tests/neg/i20511-1.scala:7:27 --------------------------------------------------------------------
7 |export toppingPrice.apply, crustPrice.apply, crustPrice.unlift // error // error // error // error // error
| ^^^^^^^^^^
| Any is not a valid export prefix, since it is not an immutable path
|
| longer explanation available when compiling with `-explain`
-- Error: tests/neg/i20511-1.scala:7:38 --------------------------------------------------------------------------------
7 |export toppingPrice.apply, crustPrice.apply, crustPrice.unlift // error // error // error // error // error
| ^^^^^
| no eligible member apply at {
| def $anonfun(crustType: Double): Double = pakiet.crustPrice(crustType)
| closure(pakiet.$anonfun:Any)
| }
-- [E083] Type Error: tests/neg/i20511-1.scala:7:45 --------------------------------------------------------------------
7 |export toppingPrice.apply, crustPrice.apply, crustPrice.unlift // error // error // error // error // error
| ^^^^^^^^^^
| Any is not a valid export prefix, since it is not an immutable path
|
| longer explanation available when compiling with `-explain`
-- Error: tests/neg/i20511-1.scala:7:56 --------------------------------------------------------------------------------
7 |export toppingPrice.apply, crustPrice.apply, crustPrice.unlift // error // error // error // error // error
| ^^^^^^
| no eligible member unlift at {
| def $anonfun(crustType: Double): Double = pakiet.crustPrice(crustType)
| closure(pakiet.$anonfun:Any)
| }
7 changes: 7 additions & 0 deletions tests/neg/i20511-1.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package pakiet

def toppingPrice(size: Int): Double = ???

def crustPrice(crustType: Double): Double = ???

export toppingPrice.apply, crustPrice.apply, crustPrice.unlift // error // error // error // error // error
14 changes: 14 additions & 0 deletions tests/neg/i20511.check
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
-- [E040] Syntax Error: tests/neg/i20511.scala:7:19 --------------------------------------------------------------------
7 |export toppingPrice, crustPrice // error // error
| ^
| '.' expected, but ',' found
-- [E040] Syntax Error: tests/neg/i20511.scala:8:0 ---------------------------------------------------------------------
8 |val i = 1 // error
|^^^
|'.' expected, but 'end of statement' found
-- [E083] Type Error: tests/neg/i20511.scala:7:21 ----------------------------------------------------------------------
7 |export toppingPrice, crustPrice // error // error
| ^^^^^^^^^^
| Any is not a valid export prefix, since it is not an immutable path
|
| longer explanation available when compiling with `-explain`
8 changes: 8 additions & 0 deletions tests/neg/i20511.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package pakiet

def toppingPrice(size: Int): Double = ???

def crustPrice(crustType: Double): Double = ???

export toppingPrice, crustPrice // error // error
val i = 1 // error

0 comments on commit 3a5e137

Please sign in to comment.