Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

compilation failures on tests in Scala 2.13 community build #97

Closed
SethTisue opened this issue Jan 24, 2018 · 7 comments
Closed

compilation failures on tests in Scala 2.13 community build #97

SethTisue opened this issue Jan 24, 2018 · 7 comments
Assignees

Comments

@SethTisue
Copy link
Member

from https://scala-ci.typesafe.com/view/scala-2.13.x/job/scala-2.13.x-integrate-community-build/905/consoleFull :

[scala-java8-compat] [error] /home/jenkins/workspace/scala-2.13.x-integrate-community-build/target-0.9.9/project-builds/scala-java8-compat-3b0fd4decb75f5e349e7c755590b4855660ac3b4/src/test/scala/scala/compat/java8/StreamConvertersTest.scala:249: type mismatch;
[scala-java8-compat] [error]  found   : java.util.stream.Stream[Short]
[scala-java8-compat] [error]  required: java.util.stream.IntStream
[scala-java8-compat] [error]     assertEquals(Vector[Short](1.toShort, 2.toShort, 3.toShort), (Array[Short](1.toShort, 2.toShort, 3.toShort).seqStream: IntStream).toScala[Vector])
[scala-java8-compat] [error]                                                                                                                 ^
[scala-java8-compat] [error] /home/jenkins/workspace/scala-2.13.x-integrate-community-build/target-0.9.9/project-builds/scala-java8-compat-3b0fd4decb75f5e349e7c755590b4855660ac3b4/src/test/scala/scala/compat/java8/StreamConvertersTest.scala:253: type mismatch;
[scala-java8-compat] [error]  found   : java.util.stream.Stream[Int]
[scala-java8-compat] [error]  required: java.util.stream.IntStream
[scala-java8-compat] [error]     assertEquals(Vector[Int](1, 2, 3), (Vector[Int](1, 2, 3).seqStream: IntStream).toScala[Vector])
[scala-java8-compat] [error]                                                              ^
[scala-java8-compat] [error] /home/jenkins/workspace/scala-2.13.x-integrate-community-build/target-0.9.9/project-builds/scala-java8-compat-3b0fd4decb75f5e349e7c755590b4855660ac3b4/src/test/scala/scala/compat/java8/StreamConvertersTest.scala:254: type mismatch;
[scala-java8-compat] [error]  found   : java.util.stream.Stream[Short]
[scala-java8-compat] [error]  required: java.util.stream.IntStream
[scala-java8-compat] [error]     assertEquals(Vector[Short](1.toShort, 2.toShort, 3.toShort), (Vector[Short](1.toShort, 2.toShort, 3.toShort).seqStream: IntStream).toScala[Vector])
[scala-java8-compat] [error]                                                                                                                  ^
[scala-java8-compat] [error] /home/jenkins/workspace/scala-2.13.x-integrate-community-build/target-0.9.9/project-builds/scala-java8-compat-3b0fd4decb75f5e349e7c755590b4855660ac3b4/src/test/scala/scala/compat/java8/StreamConvertersTest.scala:269: type mismatch;
[scala-java8-compat] [error]  found   : java.util.stream.Stream[Int]
[scala-java8-compat] [error]  required: java.util.stream.IntStream
[scala-java8-compat] [error]     val ss2: IntStream = ss
[scala-java8-compat] [error]                          ^
[scala-java8-compat] [error] four errors found
[scala-java8-compat] [error] (root/test:compileIncremental) Compilation failed
@SethTisue SethTisue changed the title compilation failures in Scala 2.13 community build compilation failures on tests in Scala 2.13 community build Jan 24, 2018
@retronym retronym self-assigned this Jan 25, 2018
@retronym
Copy link
Member

I can reproduce locally:

⚡ VER=$(scala-ref-version heads/2.13.x); sbt -Dnodocs=true ++$VER 'set scalacOptions += "-nowarn"' test:compile
[info] Loading global plugins from /Users/jz/.sbt/0.13/plugins
[info] Loading project definition from /Users/jz/code/scala-java8-compat/project/project
[info] Loading project definition from /Users/jz/code/scala-java8-compat/project
[info] Set current project to scala-java8-compat (in build file:/Users/jz/code/scala-java8-compat/)
[info] Setting version to 2.13.0-pre-4503ad2-SNAPSHOT
[info] Reapplying settings...
[info] Set current project to scala-java8-compat (in build file:/Users/jz/code/scala-java8-compat/)
[info] Defining root/*:scalacOptions
[info] The new value will be used by root/compile:scalacOptions, root/genjavadoc:scalacOptions
[info] Reapplying settings...
[info] Set current project to scala-java8-compat (in build file:/Users/jz/code/scala-java8-compat/)
[info] Running WrapFnGen /Users/jz/code/scala-java8-compat/target/scala-2.13.0-pre-4503ad2-SNAPSHOT/src_managed/main/FunctionConverters.scala
[info] Compiling 40 Scala sources and 52 Java sources to /Users/jz/code/scala-java8-compat/target/scala-2.13.0-pre-4503ad2-SNAPSHOT/classes...
[info] /Users/jz/code/scala-java8-compat/src/main/java/scala/compat/java8/ScalaStreamSupport.java: Some input files use unchecked or unsafe operations.
[info] /Users/jz/code/scala-java8-compat/src/main/java/scala/compat/java8/ScalaStreamSupport.java: Recompile with -Xlint:unchecked for details.
[info] Compiling 6 Scala sources and 7 Java sources to /Users/jz/code/scala-java8-compat/target/scala-2.13.0-pre-4503ad2-SNAPSHOT/test-classes...
[error] /Users/jz/code/scala-java8-compat/src/test/scala/scala/compat/java8/StreamConvertersTest.scala:249: type mismatch;
[error]  found   : java.util.stream.Stream[Short]
[error]  required: java.util.stream.IntStream
[error]     assertEquals(Vector[Short](1.toShort, 2.toShort, 3.toShort), (Array[Short](1.toShort, 2.toShort, 3.toShort).seqStream: IntStream).toScala[Vector])
[error]                                                                                                                 ^
[error] /Users/jz/code/scala-java8-compat/src/test/scala/scala/compat/java8/StreamConvertersTest.scala:253: type mismatch;
[error]  found   : java.util.stream.Stream[Int]
[error]  required: java.util.stream.IntStream
[error]     assertEquals(Vector[Int](1, 2, 3), (Vector[Int](1, 2, 3).seqStream: IntStream).toScala[Vector])
[error]                                                              ^
[error] /Users/jz/code/scala-java8-compat/src/test/scala/scala/compat/java8/StreamConvertersTest.scala:254: type mismatch;
[error]  found   : java.util.stream.Stream[Short]
[error]  required: java.util.stream.IntStream
[error]     assertEquals(Vector[Short](1.toShort, 2.toShort, 3.toShort), (Vector[Short](1.toShort, 2.toShort, 3.toShort).seqStream: IntStream).toScala[Vector])
[error]                                                                                                                  ^
[error] /Users/jz/code/scala-java8-compat/src/test/scala/scala/compat/java8/StreamConvertersTest.scala:269: type mismatch;
[error]  found   : java.util.stream.Stream[Int]
[error]  required: java.util.stream.IntStream
[error]     val ss2: IntStream = ss
[error]                          ^
[error] four errors found
[error] (root/test:compileIncremental) Compilation failed
[error] Total time: 18 s, completed 25/01/2018 12:31:25 PM

@retronym
Copy link
Member

I've partially minimized

--- /tmp/okay	2018-01-25 13:06:10.000000000 +1000
+++ /tmp/broke	2018-01-25 13:06:26.000000000 +1000
@@ -1,48 +1,58 @@
 package scala.compat.java8

 import java.util.stream._
 import StreamConverters._

 class Test {
-  x
   y
+  x

   def x = EnrichAnySteppableWithSeqStream(Vector[Int](1, 2, 3)).seqStream: IntStream
   def y =  EnrichAnySteppableWithSeqStream(Array[String]("a", "b")).seqStream: Stream[String]

 }
 /Users/jz/code/scala-java8-compat/src/test/scala/scala/compat/java8/StreamConvertersTest.scala:10: $conforms is not a valid implicit value for scala.collection.immutable.Vector[Int] => scala.compat.java8.converterImpl.MakesStepper[A,Any] because:
-hasMatchingSymbol reported error: type mismatch;
- found   : scala.collection.immutable.Vector[Int] <:< scala.collection.immutable.Vector[Int]
- required: scala.collection.immutable.Vector[Int] => scala.compat.java8.converterImpl.MakesStepper[?,Any]
-  def x = EnrichAnySteppableWithSeqStream(Vector[Int](1, 2, 3)).seqStream: IntStream
-                                         ^
-/Users/jz/code/scala-java8-compat/src/test/scala/scala/compat/java8/StreamConvertersTest.scala:11: materializing requested scala.reflect.type.ClassTag[String] using scala.reflect.`package`.materializeClassTag[String]()
 /Users/jz/code/scala-java8-compat/src/test/scala/scala/compat/java8/StreamConvertersTest.scala:11: materializing requested scala.reflect.type.ClassTag[String] using scala.reflect.`package`.materializeClassTag[String]()
   def y =  EnrichAnySteppableWithSeqStream(Array[String]("a", "b")).seqStream: Stream[String]
                                                         ^
 /Users/jz/code/scala-java8-compat/src/test/scala/scala/compat/java8/StreamConvertersTest.scala:11: $conforms is not a valid implicit value for Array[String] => scala.compat.java8.converterImpl.MakesStepper[A,Any] because:
 hasMatchingSymbol reported error: type mismatch;
  found   : Array[String] <:< Array[String]
  required: Array[String] => scala.compat.java8.converterImpl.MakesStepper[?,Any]
   def y =  EnrichAnySteppableWithSeqStream(Array[String]("a", "b")).seqStream: Stream[String]
                                           ^
+/Users/jz/code/scala-java8-compat/src/test/scala/scala/compat/java8/StreamConvertersTest.scala:10: $conforms is not a valid implicit value for scala.collection.immutable.Vector[Int] => scala.compat.java8.converterImpl.MakesStepper[A,Any] because:
+hasMatchingSymbol reported error: type mismatch;
+ found   : scala.collection.immutable.Vector[Int] <:< scala.collection.immutable.Vector[Int]
+ required: scala.collection.immutable.Vector[Int] => scala.compat.java8.converterImpl.MakesStepper[?,Any]
+  def x = EnrichAnySteppableWithSeqStream(Vector[Int](1, 2, 3)).seqStream: IntStream
+                                         ^
+/Users/jz/code/scala-java8-compat/src/test/scala/scala/compat/java8/StreamConvertersTest.scala:10: java8.this.StreamShape.IntValue is not a valid implicit value for scala.compat.java8.StreamShape[Int,S] because:
+type parameters weren't correctly instantiated outside of the implicit tree: inferred type arguments [java.util.stream.IntStream] do not conform to method EnrichAnySteppableWithSeqStream's type parameter bounds [S <: java.util.stream.BaseStream[_, java.util.stream.Stream[Int]]]
+  def x = EnrichAnySteppableWithSeqStream(Vector[Int](1, 2, 3)).seqStream: IntStream
+                                         ^
+/Users/jz/code/scala-java8-compat/src/test/scala/scala/compat/java8/StreamConvertersTest.scala:10: error: type mismatch;
+ found   : java.util.stream.Stream[Int]
+ required: java.util.stream.IntStream
+  def x = EnrichAnySteppableWithSeqStream(Vector[Int](1, 2, 3)).seqStream: IntStream
+                                                                ^
 [[syntax trees at end of                     typer]] // StreamConvertersTest.scala
 package scala.compat.java8 {
   import java.util.stream._;
   import StreamConverters._;
   class Test extends scala.AnyRef {
     def <init>(): scala.compat.java8.Test = {
       Test.super.<init>();
       ()
     };
-    Test.this.x;
     Test.this.y;
-    def x: java.util.stream.IntStream = (StreamConverters.EnrichAnySteppableWithSeqStream[Int, java.util.stream.IntStream, scala.collection.immutable.Vector[Int]](scala.`package`.Vector.apply[Int](1, 2, 3))({
+    Test.this.x;
+    def x: java.util.stream.IntStream = (StreamConverters.EnrichAnySteppableWithSeqStream[Int, java.util.stream.Stream[Int], scala.collection.immutable.Vector[Int]](scala.`package`.Vector.apply[Int](1, 2, 3))({
   ((underlying: Vector[Int]) => StreamConverters.richVectorCanStep[Int](underlying))
-}, java8.this.StreamShape.IntValue).seqStream: java.util.stream.IntStream);
+}, java8.this.StreamShape.anyStreamShape[Int]).<seqStream: error>: java.util.stream.IntStream);
     def y: java.util.stream.Stream[String] = (StreamConverters.EnrichAnySteppableWithSeqStream[String, java.util.stream.Stream[String], Array[String]](scala.Array.apply[String]("a", "b")((ClassTag.apply[String](classOf[java.lang.String]): scala.reflect.ClassTag[String])))({
   ((underlying: Array[String]) => StreamConverters.richArrayCanStep[String](underlying))
 }, java8.this.StreamShape.anyStreamShape[String]).seqStream: java.util.stream.Stream[String])
   }
 }

+one error found

@retronym
Copy link
Member

Standalone:

package scala.compat.java8

trait BaseStream[T, S <: BaseStream[T, S]]
trait Stream[T] extends BaseStream[T, Stream[T]]
trait IntStream extends BaseStream[Integer, IntStream]

sealed trait SS[T, S <: BaseStream[_, S]]
object SSImplicits extends Low {
  implicit val IntValue: SS[Int, IntStream] = null
}
trait Low {
  implicit def anyStreamShape[T]: SS[T, Stream[T]] = null
}

import SSImplicits.{IntValue, anyStreamShape}

class Test {
  implicit def f[A, S <: BaseStream[_, S], CC](a: A)(implicit ss: SS[A, S]): S = ???

  // switch these lines and typechecking the body of `def x` fails in 2.13.x
  x
  y

  def x = f(0): IntStream
  def y = f[String, Stream[String], Vector[String]]("")

}

@retronym
Copy link
Member

Regressed in scala/scala#6140

milessabin added a commit to milessabin/scala that referenced this issue Feb 3, 2018
The bounds propagation introduced in scala#6140 caused a
regression in scala/scala-java8-compat#97 because bounds sharpened while
ranking implicit candidates leaked from candidates tested earlier to
those tested later.

This commit fixes that by saving and restoring the infos of the symbols
of the undetermined type parameters around the call to type check the
implicit candidate which tests for it's applicability.

Initially it seemed like this ought to be a job for undoLog or
Context#savingUndeteriminedTypeParams, but neither of those do the right
thing here. UndoLog doesn't help because it affects the constraint on
the corresponding TypeVar rather than the info of the symbol; and
savingUndeterminedTypeParams doesn't help because the relevant call to
typedImplicit shares the enclosing ImplicitSearch#undetParams rather
than looking at the context.
@milessabin
Copy link

Hopefully fixed in scala/scala#6308.

@SethTisue
Copy link
Member Author

for version 0.9.0, I will drop 2.13.0-M3 from the cross-build.

once M4 is out (and genjavadoc has been published for it), we should re-add it.

@SethTisue
Copy link
Member Author

the issue seems to be fixed in M5.

as for the cross-build, for now we're on a separate 2.13.x branch, #113 is about eventually merging that branch

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants