summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorJason Zaugg <jzaugg@gmail.com>2012-10-25 08:00:16 +0200
committerGrzegorz Kossakowski <grzegorz.kossakowski@gmail.com>2012-11-02 12:27:54 -0700
commita525d371e10b2bb9b6a2228f67603aa318f97716 (patch)
treeeea8a41a840d7971bc963b30464eb2e0bcae96bf /test
parentf8ed076e251ff8b6e2b1d27f8c8a0dde2117308d (diff)
downloadscala-a525d371e10b2bb9b6a2228f67603aa318f97716.tar.gz
scala-a525d371e10b2bb9b6a2228f67603aa318f97716.tar.bz2
scala-a525d371e10b2bb9b6a2228f67603aa318f97716.zip
SI-6562 Fix crash with class nested in @inline method
e6b4204604 moved access widenings from ExplicitOuter to SuperAccessors to reflect them in pickled signatures so that the inliner can take advantage of them under separate compilation. The followup discussion [1] determined that this wasn't the right solution: while it enabled new separate compilation inlinings, it failed to widen access of outer pointers and hence prevented certain inlinings. A better solution was proposed: modify the inliner to know that access widening is guaranteed to have happened in ExplicitOuter for any field accessed by an @inline-d method body, rather than relying solely on the pickled types. But this hasn't happened yet. In the meantime 07f94297 / #1121 reinstated the access widening to SuperAccessors, but took a slightly different approach, using `Symbol#enclMethod` rather than `closestEnclMethod`. That deviation triggers SI-6562. This commit goes back to `closestEnclMethod`. [1] https://groups.google.com/forum/#!topic/scala-internals/iPkMCygzws4
Diffstat (limited to 'test')
-rw-r--r--test/files/pos/t6562.scala14
1 files changed, 14 insertions, 0 deletions
diff --git a/test/files/pos/t6562.scala b/test/files/pos/t6562.scala
new file mode 100644
index 0000000000..eec7aa5199
--- /dev/null
+++ b/test/files/pos/t6562.scala
@@ -0,0 +1,14 @@
+class Test {
+
+ @inline
+ def foo {
+ def it = new {}
+ (_: Any) => it
+ }
+
+ @inline
+ private def bar {
+ def it = new {}
+ (_: Any) => it
+ }
+}