summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/nsc/backend/opt/ClosureElimination.scala
diff options
context:
space:
mode:
authorAdriaan Moors <adriaan.moors@typesafe.com>2014-05-19 12:56:11 +0200
committerAdriaan Moors <adriaan.moors@typesafe.com>2014-05-19 12:56:11 +0200
commitf0eb8d93d51b110f11786a5f3664cde9db66efcc (patch)
tree3403b50da9e42b66f90922119ac9433390de35d6 /src/compiler/scala/tools/nsc/backend/opt/ClosureElimination.scala
parentb11a27e3e655105ec6f7640934072ba7966c88a3 (diff)
downloadscala-f0eb8d93d51b110f11786a5f3664cde9db66efcc.tar.gz
scala-f0eb8d93d51b110f11786a5f3664cde9db66efcc.tar.bz2
scala-f0eb8d93d51b110f11786a5f3664cde9db66efcc.zip
Revert "SI-8601 Avoid over-eager optimization of LOAD_FIELD"
This reverts commit 0b432f9cd22b6e9770852e5b331a15f0534a312c.
Diffstat (limited to 'src/compiler/scala/tools/nsc/backend/opt/ClosureElimination.scala')
-rw-r--r--src/compiler/scala/tools/nsc/backend/opt/ClosureElimination.scala9
1 files changed, 5 insertions, 4 deletions
diff --git a/src/compiler/scala/tools/nsc/backend/opt/ClosureElimination.scala b/src/compiler/scala/tools/nsc/backend/opt/ClosureElimination.scala
index 0b943360de..c49f23852f 100644
--- a/src/compiler/scala/tools/nsc/backend/opt/ClosureElimination.scala
+++ b/src/compiler/scala/tools/nsc/backend/opt/ClosureElimination.scala
@@ -56,10 +56,11 @@ abstract class ClosureElimination extends SubComponent {
case (BOX(t1), UNBOX(t2)) if (t1 == t2) =>
Some(Nil)
- // Can't eliminate (LOAD_FIELD, DROP) without eliding side effects:
- // - static class initialization
- // - NPE if the receiver is null
- // We could replace the LOAD/DROP with a null check to preserve semantics.
+ case (LOAD_FIELD(sym, isStatic), DROP(_)) if !sym.hasAnnotation(definitions.VolatileAttr) =>
+ if (isStatic)
+ Some(Nil)
+ else
+ Some(DROP(REFERENCE(definitions.ObjectClass)) :: Nil)
case _ => None
}