Check that case classes are not inherited by case classes.
tp is a class type.
traitReq is true, check that
tp is a trait.
stablePrefixReq is true and phase is not after RefChecks,
check that class prefix is stable.
Verify classes extending AnyVal meet the requirements
Check that all case classes that extend
Check that all references coming from enum cases in an enum companion object are legal.
Check all enum cases in all enum companions in
stats for legal accesses.
tp is a class type and that any top-level type arguments in this type
are feasible, i.e. that their lower bound conforms to their upper bound. If a type
argument is infeasible, issue and error and continue with upper bound.
Check that a non-implicit parameter making up the first parameter section of an implicit conversion is not a singleton type.
tree is a pure expression of constant type
Check that all named type that form part of this type have a denotation.
Called on inferred (result) types of ValDefs and DefDefs.
This could fail for types where the member was originally available as part
of the self type, yet is no longer visible once the
this has been replaced
by some other prefix. See neg/i3083.scala
Check that class does not declare same symbol twice
Check that method parameter types do not reference their own parameter or later parameters in the same parameter section.
tpt does not refer to a singleton type
Check that all type members of
tp have realizable bounds
Check that all non-synthetic references of the form
tree that refer to a member of
allowed. Also check that there are no other explicit
tpt does not define a higher-kinded type
Check that type
tp is stable.
Given a parent
parent of a class
parent is a trait check that
the superclass of
cls derived from the superclass of
An exception is made if
java.lang.Comparable. These two classes are treated by Scala as universal
traits. E.g. the following is OK:
... extends Any with java.io.Serializable
The standard library relies on this idiom.