Skip to content

Stack overflow in ref-check of a method-local type alias refining a contravariant type parameter of the enclosing class #12596

Open
@noresttherein

Description

@noresttherein

Reproduction steps

In Scala 2.13.8

	type Type[T] = T { type X = Type[T] }

Another case:

	trait Contra[-F] {
		def method() :Unit = {
			type Refine = F { type Self <: Refine }
		}
	}

Problem

Compiler's output:

java.lang.StackOverflowError
	at scala.reflect.internal.Symbols$Symbol.variance(Symbols.scala:1160)
	at scala.reflect.internal.Variances$VarianceValidator$ValidateVarianceMap$.apply(Variances.scala:126)
	at scala.reflect.internal.Types$TypeBounds.$anonfun$mapOver$1(Types.scala:1575)
	at scala.reflect.internal.Types$TypeBounds.mapOver(Types.scala:1575)
	at scala.reflect.internal.Variances$VarianceValidator$ValidateVarianceMap$.apply(Variances.scala:130)
	at scala.reflect.internal.Variances$VarianceValidator$ValidateVarianceMap$.$anonfun$mapOver$2(Variances.scala:106)
	at scala.reflect.internal.Variances$VarianceValidator$ValidateVarianceMap$.$anonfun$mapOver$1(Variances.scala:106)
	at scala.reflect.internal.Scopes$Scope.foreach(Scopes.scala:455)
	at scala.reflect.internal.Variances$VarianceValidator$ValidateVarianceMap$.mapOver(Variances.scala:106)
	at scala.reflect.internal.Types$RefinedType.mapOver(Types.scala:1863)
	at scala.reflect.internal.Variances$VarianceValidator$ValidateVarianceMap$.apply(Variances.scala:127)
	at scala.reflect.internal.Variances$VarianceValidator$ValidateVarianceMap$.apply(Variances.scala:125)
	at scala.reflect.internal.Types$TypeBounds.mapOver(Types.scala:1578)
	at scala.reflect.internal.Variances$VarianceValidator$ValidateVarianceMap$.apply(Variances.scala:130)
	at scala.reflect.internal.Variances$VarianceValidator$ValidateVarianceMap$.$anonfun$mapOver$2(Variances.scala:106)
	at scala.reflect.internal.Variances$VarianceValidator$ValidateVarianceMap$.$anonfun$mapOver$1(Variances.scala:106)
	at scala.reflect.internal.Scopes$Scope.foreach(Scopes.scala:455)
	at scala.reflect.internal.Variances$VarianceValidator$ValidateVarianceMap$.mapOver(Variances.scala:106)
	at scala.reflect.internal.Types$RefinedType.mapOver(Types.scala:1863)
	at scala.reflect.internal.Variances$VarianceValidator$ValidateVarianceMap$.apply(Variances.scala:127)
	at scala.reflect.internal.Variances$VarianceValidator$ValidateVarianceMap$.apply(Variances.scala:125)
	at scala.reflect.internal.Types$TypeBounds.mapOver(Types.scala:1578)
	at scala.reflect.internal.Variances$VarianceValidator$ValidateVarianceMap$.apply(Variances.scala:130)
	at scala.reflect.internal.Variances$VarianceValidator$ValidateVarianceMap$.$anonfun$mapOver$2(Variances.scala:106)
	at scala.reflect.internal.Variances$VarianceValidator$ValidateVarianceMap$.$anonfun$mapOver$1(Variances.scala:106)
	at scala.reflect.internal.Scopes$Scope.foreach(Scopes.scala:455)
	at scala.reflect.internal.Variances$VarianceValidator$ValidateVarianceMap$.mapOver(Variances.scala:106)
	at scala.reflect.internal.Types$RefinedType.mapOver(Types.scala:1863)
	at scala.reflect.internal.Variances$VarianceValidator$ValidateVarianceMap$.apply(Variances.scala:127)
	at scala.reflect.internal.Variances$VarianceValidator$ValidateVarianceMap$.apply(Variances.scala:125)
	at scala.reflect.internal.Types$TypeBounds.mapOver(Types.scala:1578)
	at scala.reflect.internal.Variances$VarianceValidator$ValidateVarianceMap$.apply(Variances.scala:130)
	at scala.reflect.internal.Variances$VarianceValidator$ValidateVarianceMap$.$anonfun$mapOver$2(Variances.scala:106)
	at scala.reflect.internal.Variances$VarianceValidator$ValidateVarianceMap$.$anonfun$mapOver$1(Variances.scala:106)
	at scala.reflect.internal.Scopes$Scope.foreach(Scopes.scala:455)
	at scala.reflect.internal.Variances$VarianceValidator$ValidateVarianceMap$.mapOver(Variances.scala:106)
	at scala.reflect.internal.Types$RefinedType.mapOver(Types.scala:1863)
	at scala.reflect.internal.Variances$VarianceValidator$ValidateVarianceMap$.apply(Variances.scala:127)
	at scala.reflect.internal.Variances$VarianceValidator$ValidateVarianceMap$.apply(Variances.scala:125)
	at scala.reflect.internal.Types$TypeBounds.mapOver(Types.scala:1578)
	at scala.reflect.internal.Variances$VarianceValidator$ValidateVarianceMap$.apply(Variances.scala:130)
	at scala.reflect.internal.Variances$VarianceValidator$ValidateVarianceMap$.$anonfun$mapOver$2(Variances.scala:106)
	at scala.reflect.internal.Variances$VarianceValidator$ValidateVarianceMap$.$anonfun$mapOver$1_
```_

Metadata

Metadata

Assignees

No one assigned

    Labels

    compiler crashfixed in Scala 3This issue does not exist in the Scala 3 compiler (https://github.com/lampepfl/dotty/)

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions