diff options
author | Jason Zaugg <jzaugg@gmail.com> | 2014-11-06 17:35:12 +1000 |
---|---|---|
committer | Jason Zaugg <jzaugg@gmail.com> | 2014-11-07 11:21:02 +1000 |
commit | d76a2812ca56cd0d093fbbeb3ab60b35cd9c3180 (patch) | |
tree | e7ddc26676a9310c87e112406ba20da7c68817d4 /test | |
parent | cd50464cd019bc6a489a72b98293c30b91352bab (diff) | |
download | scala-d76a2812ca56cd0d093fbbeb3ab60b35cd9c3180.tar.gz scala-d76a2812ca56cd0d093fbbeb3ab60b35cd9c3180.tar.bz2 scala-d76a2812ca56cd0d093fbbeb3ab60b35cd9c3180.zip |
SI-7602 Avoid crash in LUBs with erroneous code
If a class contains a double defintion of a method that overrides
an interface method, LUBs could run into a spot where filtering
overloaded alternatives to those that match the interface method
fails to resolve to a single overload, which crashes the compiler.
This commit uses `filter` rather than `suchThat` to avoid the crash.
Diffstat (limited to 'test')
-rw-r--r-- | test/files/neg/t7602.check | 5 | ||||
-rw-r--r-- | test/files/neg/t7602.scala | 26 |
2 files changed, 31 insertions, 0 deletions
diff --git a/test/files/neg/t7602.check b/test/files/neg/t7602.check new file mode 100644 index 0000000000..5bb1450d7d --- /dev/null +++ b/test/files/neg/t7602.check @@ -0,0 +1,5 @@ +t7602.scala:16: error: method foo is defined twice + conflicting symbols both originated in file 't7602.scala' + def foo : Device + ^ +one error found diff --git a/test/files/neg/t7602.scala b/test/files/neg/t7602.scala new file mode 100644 index 0000000000..5a9444a1ab --- /dev/null +++ b/test/files/neg/t7602.scala @@ -0,0 +1,26 @@ +trait Table[T]{ + def foo : T +} +trait Computer +trait Device + +object schema{ + def lub[T]( a:T, b:T ) = ??? + lub(null:Computers,null:Devices) +} +trait Computers extends Table[Computer]{ + def foo : Computer +} +trait Devices extends Table[Device]{ + def foo : Device + def foo : Device +} +/* Was: +Exception in thread "main" java.lang.AssertionError: assertion failed: List(method foo, method foo) + at scala.Predef$.assert(Predef.scala:165) + at scala.reflect.internal.Symbols$Symbol.suchThat(Symbols.scala:1916) + at scala.reflect.internal.tpe.GlbLubs$$anonfun$23.apply(GlbLubs.scala:350) + at scala.reflect.internal.tpe.GlbLubs$$anonfun$23.apply(GlbLubs.scala:349) + at scala.collection.immutable.List.map(List.scala:272) + at scala.reflect.internal.tpe.GlbLubs$class.lubsym$1(GlbLubs.scala:349) +*/
\ No newline at end of file |