Skip to content

Commit 0a55e7f

Browse files
committed
Generate inline accessor for trait definitions
Workaround issue with inlined trait members references
1 parent 5787d63 commit 0a55e7f

File tree

2 files changed

+7
-7
lines changed

2 files changed

+7
-7
lines changed

compiler/src/dotty/tools/dotc/inlines/PrepareInlineable.scala

+2-2
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ object PrepareInlineable {
7474
def needsAccessor(sym: Symbol)(using Context): Boolean =
7575
sym.isTerm &&
7676
(sym.isOneOf(AccessFlags) || sym.privateWithin.exists) &&
77-
(!sym.isBinaryAPI || (sym.is(Private) && !sym.owner.is(Trait))) &&
77+
(!sym.isBinaryAPI || sym.is(Private)) &&
7878
!(sym.isStableMember && sym.info.widenTermRefExpr.isInstanceOf[ConstantType]) &&
7979
!sym.isInlineMethod &&
8080
(Inlines.inInlineMethod || StagingContext.level > 0)
@@ -252,7 +252,7 @@ object PrepareInlineable {
252252
/** Create an inline accessor for this definition. */
253253
def makePrivateBinaryAPIAccessor(sym: Symbol)(using Context): Unit =
254254
assert(sym.is(Private))
255-
if !sym.owner.is(Trait) then
255+
if !sym.is(Accessor) then
256256
val ref = tpd.ref(sym).asInstanceOf[RefTree]
257257
val accessor = InsertPrivateBinaryAPIAccessors.useAccessor(ref)
258258
if sym.is(Mutable) then

compiler/test/dotty/tools/backend/jvm/BinaryAPITests.scala

+5-5
Original file line numberDiff line numberDiff line change
@@ -300,19 +300,19 @@ class BinaryAPITests extends DottyBytecodeTest {
300300
val testInlined = getMethod(cTrait, "testInlined")
301301
val testInlinedInstructions = instructionsFromMethod(testInlined).filter(_.isInstanceOf[Invoke])
302302
assertSameCode(testInlinedInstructions, List(
303-
Invoke(INVOKEINTERFACE, "C", "C$$privateVarBinaryAPI_$eq", "(I)V", true),
303+
Invoke(INVOKEINTERFACE, "C", "C$$inline$privateVarBinaryAPI_$eq", "(I)V", true),
304304
Invoke(INVOKEINTERFACE, "C", "packagePrivateVarBinaryAPI_$eq", "(I)V", true),
305305
Invoke(INVOKEINTERFACE, "C", "protectedVarBinaryAPI_$eq", "(I)V", true),
306-
Invoke(INVOKEINTERFACE, "C", "C$$privateValBinaryAPI", "()I", true),
306+
Invoke(INVOKEINTERFACE, "C", "C$$inline$privateValBinaryAPI", "()I", true),
307307
Invoke(INVOKEINTERFACE, "C", "packagePrivateValBinaryAPI", "()I", true),
308308
Invoke(INVOKEINTERFACE, "C", "protectedValBinaryAPI", "()I", true),
309-
Invoke(INVOKEINTERFACE, "C", "C$$privateLazyValBinaryAPI", "()I", true),
309+
Invoke(INVOKEINTERFACE, "C", "C$$inline$privateLazyValBinaryAPI", "()I", true),
310310
Invoke(INVOKEINTERFACE, "C", "packagePrivateLazyValBinaryAPI", "()I", true),
311311
Invoke(INVOKEINTERFACE, "C", "protectedLazyValBinaryAPI", "()I", true),
312-
Invoke(INVOKEINTERFACE, "C", "C$$privateVarBinaryAPI", "()I", true),
312+
Invoke(INVOKEINTERFACE, "C", "C$$inline$privateVarBinaryAPI", "()I", true),
313313
Invoke(INVOKEINTERFACE, "C", "packagePrivateVarBinaryAPI", "()I", true),
314314
Invoke(INVOKEINTERFACE, "C", "protectedVarBinaryAPI", "()I", true),
315-
Invoke(INVOKESPECIAL, "C", "privateDefBinaryAPI", "()I", true),
315+
Invoke(INVOKEINTERFACE, "C", "C$$inline$privateDefBinaryAPI", "()I", true),
316316
Invoke(INVOKEINTERFACE, "C", "packagePrivateDefBinaryAPI", "()I", true),
317317
Invoke(INVOKEINTERFACE, "C", "protectedDefBinaryAPI", "()I", true)
318318
))

0 commit comments

Comments
 (0)