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 | |
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')
-rw-r--r-- | test/files/run/t7582.check | 2 | ||||
-rw-r--r-- | test/files/run/t7582.flags | 1 | ||||
-rw-r--r-- | test/files/run/t7582/InlineHolder.scala | 16 | ||||
-rw-r--r-- | test/files/run/t7582/PackageProtectedJava.java | 6 | ||||
-rw-r--r-- | test/files/run/t7582b.check | 2 | ||||
-rw-r--r-- | test/files/run/t7582b.flags | 1 | ||||
-rw-r--r-- | test/files/run/t7582b/InlineHolder.scala | 16 | ||||
-rw-r--r-- | test/files/run/t7582b/PackageProtectedJava.java | 6 |
8 files changed, 50 insertions, 0 deletions
diff --git a/test/files/run/t7582.check b/test/files/run/t7582.check new file mode 100644 index 0000000000..225fb1ace8 --- /dev/null +++ b/test/files/run/t7582.check @@ -0,0 +1,2 @@ +warning: there were 1 inliner warning(s); re-run with -Yinline-warnings for details +2 diff --git a/test/files/run/t7582.flags b/test/files/run/t7582.flags new file mode 100644 index 0000000000..1182725e86 --- /dev/null +++ b/test/files/run/t7582.flags @@ -0,0 +1 @@ +-optimize
\ No newline at end of file diff --git a/test/files/run/t7582/InlineHolder.scala b/test/files/run/t7582/InlineHolder.scala new file mode 100644 index 0000000000..a18b9effaa --- /dev/null +++ b/test/files/run/t7582/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/t7582/PackageProtectedJava.java b/test/files/run/t7582/PackageProtectedJava.java new file mode 100644 index 0000000000..b7ea2a7676 --- /dev/null +++ b/test/files/run/t7582/PackageProtectedJava.java @@ -0,0 +1,6 @@ +package p1; + +// public class, protected method +public class PackageProtectedJava { + static final int protectedMethod() { return 1; } +} diff --git a/test/files/run/t7582b.check b/test/files/run/t7582b.check new file mode 100644 index 0000000000..225fb1ace8 --- /dev/null +++ b/test/files/run/t7582b.check @@ -0,0 +1,2 @@ +warning: there were 1 inliner warning(s); re-run with -Yinline-warnings for details +2 diff --git a/test/files/run/t7582b.flags b/test/files/run/t7582b.flags new file mode 100644 index 0000000000..1182725e86 --- /dev/null +++ b/test/files/run/t7582b.flags @@ -0,0 +1 @@ +-optimize
\ No newline at end of file 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; } +} |