diff options
author | Lukas Rytz <lukas.rytz@gmail.com> | 2016-09-28 15:02:24 +0200 |
---|---|---|
committer | Lukas Rytz <lukas.rytz@gmail.com> | 2016-09-30 11:06:07 +0200 |
commit | 96fe4c334589aaf9e5de4288cd140d3d01794dc5 (patch) | |
tree | 4593f6d5625010ab86cd5d7a96da2c6a587943c7 /test | |
parent | 1f6006d0d4f8edf4db04915702f8b7e3c8ca1f5e (diff) | |
download | scala-96fe4c334589aaf9e5de4288cd140d3d01794dc5.tar.gz scala-96fe4c334589aaf9e5de4288cd140d3d01794dc5.tar.bz2 scala-96fe4c334589aaf9e5de4288cd140d3d01794dc5.zip |
Error message for super calls to indirect java parent interfaces
Super calls to indirect java parent interfaces cannot be emitted, an
error message is emitted during SuperAccessors.
The error message was missing if the super call was non-qualified,
resulting in an assertion failure in the backend.
Diffstat (limited to 'test')
-rw-r--r-- | test/junit/scala/lang/traits/BytecodeTest.scala | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/test/junit/scala/lang/traits/BytecodeTest.scala b/test/junit/scala/lang/traits/BytecodeTest.scala index cf658288c4..5c01ebc6b2 100644 --- a/test/junit/scala/lang/traits/BytecodeTest.scala +++ b/test/junit/scala/lang/traits/BytecodeTest.scala @@ -366,6 +366,18 @@ class BytecodeTest extends BytecodeTesting { val ins5 = getMethod(c5, "m").instructions assert(ins5 contains Invoke(INVOKESTATIC, "AS", "m$", "(LAS;)I", true), ins5.stringLines) } + + @Test + def sd224(): Unit = { + val jCode = List("interface T { default int f() { return 1; } }" -> "T.java") + val code = + """trait U extends T + |class C extends U { def t = super.f } + """.stripMargin + val msg = "unable to emit super call unless interface T (which declares method f) is directly extended by class C" + val cls = compileClasses(code, jCode, allowMessage = _.msg contains msg) + assertEquals(cls, Nil) + } } object invocationReceiversTestCode { |