File tree 2 files changed +12
-2
lines changed
compiler/src/dotty/tools/dotc/core
2 files changed +12
-2
lines changed Original file line number Diff line number Diff line change @@ -64,7 +64,12 @@ object TypeEval:
64
64
// currently not a concrete known type
65
65
case _ : TypeParamRef => None
66
66
// constant if the term is constant
67
- case t : TermRef => isConst(t.underlying)
67
+ case t : TermRef =>
68
+ if t.denot.symbol.flagsUNSAFE.is(Flags .Param ) then
69
+ // might be substituted later
70
+ None
71
+ else
72
+ isConst(t.underlying)
68
73
// an operation type => recursively check all argument compositions
69
74
case applied : AppliedType if defn.isCompiletimeAppliedType(applied.typeSymbol) =>
70
75
val argsConst = applied.args.map(isConst)
@@ -239,4 +244,4 @@ object TypeEval:
239
244
240
245
case _ => NoType
241
246
end tryCompiletimeConstantFold
242
- end TypeEval
247
+ end TypeEval
Original file line number Diff line number Diff line change @@ -37,4 +37,9 @@ object Test {
37
37
val t51 : true = isConst2[1 , 1 ]
38
38
val t52 : false = isConst2[1 , one.type ]
39
39
val t53 : true = isConst2[1 , two.type ]
40
+
41
+ val t54 : 2 = 2
42
+ summon[IsConst [t54.type ] =:= true ]
43
+ def isConst (arg : Int )(using IsConst [arg.type ] =:= true ): Unit = ???
44
+ isConst(t54)
40
45
}
You can’t perform that action at this time.
0 commit comments