diff options
author | Jason Zaugg <jzaugg@gmail.com> | 2013-06-15 15:49:17 -0400 |
---|---|---|
committer | Jason Zaugg <jzaugg@gmail.com> | 2013-06-19 13:12:05 +0200 |
commit | 1c69dbcead1d4b1d5033d316d1c0468e46b310b3 (patch) | |
tree | 693a0513525d3262a5077ffc7d06d255893691c5 /test/files/run/t7582b | |
parent | 1391c51a5232834338a21250db722a89498ee6f1 (diff) | |
download | scala-1c69dbcead1d4b1d5033d316d1c0468e46b310b3.tar.gz scala-1c69dbcead1d4b1d5033d316d1c0468e46b310b3.tar.bz2 scala-1c69dbcead1d4b1d5033d316d1c0468e46b310b3.zip |
SI-7582 Only inline accessible calls to package-private Java code
Two problems here.
The inliner was using `isPrivate` / `isProtected` to determine access.
The fallthrough considered things to be (bytecode) public. This is okay
in practice for Scala code, which never emits package private code.
Secondly, we must check accessibility of the called symbol *and* its
owner. This case is tested in `run/t7582b`.
This commit tightens the check for Java defined symbols: a) check the owner,
and b) don't assume that `! isPrivate` is accessible.
Diffstat (limited to 'test/files/run/t7582b')
-rw-r--r-- | test/files/run/t7582b/InlineHolder.scala | 16 | ||||
-rw-r--r-- | test/files/run/t7582b/PackageProtectedJava.java | 6 |
2 files changed, 22 insertions, 0 deletions
diff --git a/test/files/run/t7582b/InlineHolder.scala b/test/files/run/t7582b/InlineHolder.scala new file mode 100644 index 0000000000..a18b9effaa --- /dev/null +++ b/test/files/run/t7582b/InlineHolder.scala @@ -0,0 +1,16 @@ +package p1 { + object InlineHolder { + @inline def inlinable = p1.PackageProtectedJava.protectedMethod() + 1 + } +} + +object O { + @noinline + def x = p1.InlineHolder.inlinable +} + +object Test { + def main(args: Array[String]) { + println(O.x) + } +} diff --git a/test/files/run/t7582b/PackageProtectedJava.java b/test/files/run/t7582b/PackageProtectedJava.java new file mode 100644 index 0000000000..55a44b79f9 --- /dev/null +++ b/test/files/run/t7582b/PackageProtectedJava.java @@ -0,0 +1,6 @@ +package p1; + +// protected class, public method +class PackageProtectedJava { + public static final int protectedMethod() { return 1; } +} |