Skip to content

Commit 17012c8

Browse files
committed
Add FIXMEs regarding TypeVar#resetInst breaking our caching logic
I'm afraid we'll have to get rid of it if we want our caches to be correct, but I don't have the time to look into it right now.
1 parent 3900796 commit 17012c8

File tree

1 file changed

+9
-0
lines changed

1 file changed

+9
-0
lines changed

Diff for: compiler/src/dotty/tools/dotc/core/Types.scala

+9
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,11 @@ object Types {
109109
/** Is this type still provisional? This is the case if the type contains, or depends on,
110110
* uninstantiated type variables or type symbols that have the Provisional flag set.
111111
* This is an antimonotonic property - once a type is not provisional, it stays so forever.
112+
*
113+
* FIXME: The semantics of this flag are broken by the existence of `TypeVar#resetInst`,
114+
* a non-provisional type could go back to being provisional after
115+
* a call to `resetInst`. This means all caches that rely on `isProvisional`
116+
* can likely end up returning stale results.
112117
*/
113118
def isProvisional(using Context): Boolean = mightBeProvisional && testProvisional
114119

@@ -4739,6 +4744,10 @@ object Types {
47394744
* is different from the variable's creation state (meaning unrolls are possible)
47404745
* in the current typer state.
47414746
*
4747+
* FIXME: the "once" in the statement above is not true anymore now that `resetInst`
4748+
* exists, this is problematic for caching (see `Type#isProvisional`),
4749+
* we should try getting rid of this method.
4750+
*
47424751
* @param origin the parameter that's tracked by the type variable.
47434752
* @param creatorState the typer state in which the variable was created.
47444753
* @param initNestingLevel the initial nesting level of the type variable. (c.f. nestingLevel)

0 commit comments

Comments
 (0)