diff options
author | Lukas Rytz <lukas.rytz@gmail.com> | 2015-07-08 12:40:39 +0200 |
---|---|---|
committer | Lukas Rytz <lukas.rytz@gmail.com> | 2015-07-08 12:40:39 +0200 |
commit | 0e98c59aa180053a2684150bb9234bef4685d0be (patch) | |
tree | b90c677c3ec148b251010c5adeb954eadfcdca34 /test/files/neg | |
parent | d1f2084563288e9198e7c00f8a4d078802f53eaf (diff) | |
download | scala-0e98c59aa180053a2684150bb9234bef4685d0be.tar.gz scala-0e98c59aa180053a2684150bb9234bef4685d0be.tar.bz2 scala-0e98c59aa180053a2684150bb9234bef4685d0be.zip |
Test warnings when an indy cannot be inlined
There are two cases tested here
- An indyLMF where the lambda body method is private
- An indy where the bootstrap method is not LMF
Diffstat (limited to 'test/files/neg')
-rw-r--r-- | test/files/neg/inlineIndyLambdaPrivate.check | 16 | ||||
-rw-r--r-- | test/files/neg/inlineIndyLambdaPrivate.flags | 1 | ||||
-rw-r--r-- | test/files/neg/inlineIndyLambdaPrivate/A_1.java | 9 | ||||
-rw-r--r-- | test/files/neg/inlineIndyLambdaPrivate/Test_2.scala | 3 |
4 files changed, 29 insertions, 0 deletions
diff --git a/test/files/neg/inlineIndyLambdaPrivate.check b/test/files/neg/inlineIndyLambdaPrivate.check new file mode 100644 index 0000000000..dbd142f59e --- /dev/null +++ b/test/files/neg/inlineIndyLambdaPrivate.check @@ -0,0 +1,16 @@ +Test_2.scala:2: warning: A_1::test()Ljava/lang/String; could not be inlined: +The callee A_1::test()Ljava/lang/String; contains the instruction INVOKEDYNAMIC m()LA_1$Fun; [ + // handle kind 0x6 : INVOKESTATIC + java/lang/invoke/LambdaMetafactory.metafactory(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite; + // arguments: + (Ljava/lang/String;)Ljava/lang/String;, + // handle kind 0x6 : INVOKESTATIC + A_1.lambda$test$0(Ljava/lang/String;)Ljava/lang/String;, + (Ljava/lang/String;)Ljava/lang/String; + ] +that would cause an IllegalAccessError when inlined into class Test. + def foo = A_1.test + ^ +error: No warnings can be incurred under -Xfatal-warnings. +one warning found +one error found diff --git a/test/files/neg/inlineIndyLambdaPrivate.flags b/test/files/neg/inlineIndyLambdaPrivate.flags new file mode 100644 index 0000000000..01b466bd8c --- /dev/null +++ b/test/files/neg/inlineIndyLambdaPrivate.flags @@ -0,0 +1 @@ +-Yopt:l:classpath -Yopt-inline-heuristics:everything -Yopt-warnings:_ -Xfatal-warnings
\ No newline at end of file diff --git a/test/files/neg/inlineIndyLambdaPrivate/A_1.java b/test/files/neg/inlineIndyLambdaPrivate/A_1.java new file mode 100644 index 0000000000..a9144a9fa6 --- /dev/null +++ b/test/files/neg/inlineIndyLambdaPrivate/A_1.java @@ -0,0 +1,9 @@ +public class A_1 { + interface Fun { + String m(String s); + } + public static final String test() { + Fun f = s -> s.trim(); + return f.m(" eh "); + } +} diff --git a/test/files/neg/inlineIndyLambdaPrivate/Test_2.scala b/test/files/neg/inlineIndyLambdaPrivate/Test_2.scala new file mode 100644 index 0000000000..dd59c05176 --- /dev/null +++ b/test/files/neg/inlineIndyLambdaPrivate/Test_2.scala @@ -0,0 +1,3 @@ +class Test { + def foo = A_1.test +} |