summaryrefslogtreecommitdiff
path: root/test/files/run/t7582b
diff options
context:
space:
mode:
authorJason Zaugg <jzaugg@gmail.com>2013-06-15 15:49:17 -0400
committerJason Zaugg <jzaugg@gmail.com>2013-06-19 13:12:05 +0200
commit1c69dbcead1d4b1d5033d316d1c0468e46b310b3 (patch)
tree693a0513525d3262a5077ffc7d06d255893691c5 /test/files/run/t7582b
parent1391c51a5232834338a21250db722a89498ee6f1 (diff)
downloadscala-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.scala16
-rw-r--r--test/files/run/t7582b/PackageProtectedJava.java6
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; }
+}