diff options
author | Lukas Rytz <lukas.rytz@gmail.com> | 2015-03-30 21:40:53 +0200 |
---|---|---|
committer | Lukas Rytz <lukas.rytz@gmail.com> | 2015-04-01 08:35:33 +0200 |
commit | a5dc9b7913c113ffd15b1f23cba2a4a710546cd8 (patch) | |
tree | 7410c98f76ddcaa96494c83f2f1157d0de318cc6 /test | |
parent | 323d044f93242cb023042c37b64ce79c5810e612 (diff) | |
download | scala-a5dc9b7913c113ffd15b1f23cba2a4a710546cd8.tar.gz scala-a5dc9b7913c113ffd15b1f23cba2a4a710546cd8.tar.bz2 scala-a5dc9b7913c113ffd15b1f23cba2a4a710546cd8.zip |
Test case: cannot inline a private call into a different class.
Invocations of private methods cannot be inlined into a different
class, this would cause an IllegalAccessError.
Diffstat (limited to 'test')
-rw-r--r-- | test/junit/scala/tools/nsc/backend/jvm/opt/InlineWarningTest.scala | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/test/junit/scala/tools/nsc/backend/jvm/opt/InlineWarningTest.scala b/test/junit/scala/tools/nsc/backend/jvm/opt/InlineWarningTest.scala index fedc074a15..5b47475863 100644 --- a/test/junit/scala/tools/nsc/backend/jvm/opt/InlineWarningTest.scala +++ b/test/junit/scala/tools/nsc/backend/jvm/opt/InlineWarningTest.scala @@ -143,4 +143,31 @@ class InlineWarningTest extends ClearAfterClass { compileClasses(newCompiler(extraArgs = InlineWarningTest.argsNoWarn + " -Yopt-warnings:no-inline-mixed"))(scalaCode, List((javaCode, "A.java")), allowMessage = i => {c += 1; warns.exists(i.msg contains _)}) assert(c == 2, c) } + + @Test + def cannotInlinePrivateCallIntoDifferentClass(): Unit = { + val code = + """class M { + | @inline final def f = { + | @noinline def nested = 0 + | nested + | } + | + | def t = f // ok + |} + | + |class N { + | def t(a: M) = a.f // not possible + |} + """.stripMargin + + val warn = + """M::f()I is annotated @inline but could not be inlined: + |The callee M::f()I contains the instruction INVOKESPECIAL M.nested$1 ()I + |that would cause an IllegalAccessError when inlined into class N""".stripMargin + + var c = 0 + compile(code, allowMessage = i => { c += 1; i.msg contains warn }) + assert(c == 1, c) + } } |