From 6ae2c86f2f10964586eba23c4e9af0097716520f Mon Sep 17 00:00:00 2001 From: Iulian Dragos Date: Thu, 30 Oct 2008 13:23:19 +0000 Subject: Fixed annoying dead-code elimination bug. --- .../scala/tools/nsc/backend/opt/DeadCodeElimination.scala | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'src/compiler') diff --git a/src/compiler/scala/tools/nsc/backend/opt/DeadCodeElimination.scala b/src/compiler/scala/tools/nsc/backend/opt/DeadCodeElimination.scala index 05f959886d..49cebeb1d7 100644 --- a/src/compiler/scala/tools/nsc/backend/opt/DeadCodeElimination.scala +++ b/src/compiler/scala/tools/nsc/backend/opt/DeadCodeElimination.scala @@ -47,8 +47,7 @@ abstract class DeadCodeElimination extends SubComponent { def analyzeClass(cls: IClass) { cls.methods.foreach { m => this.method = m -// analyzeMethod(m); - dieCodeDie(m) + dieCodeDie(m) } } @@ -260,11 +259,13 @@ abstract class DeadCodeElimination extends SubComponent { abort("could not find init in: " + method) } + lazy val RuntimePackage = definitions.getModule("scala.runtime") /** Is 'sym' a side-effecting method? TODO: proper analysis. */ private def isSideEffecting(sym: Symbol): Boolean = { - !((sym.isGetter && !sym.hasFlag(Flags.LAZY)) // for testing only + !((sym.isGetter && !sym.hasFlag(Flags.LAZY)) || (sym.isConstructor - && sym.owner.owner == definitions.getModule("scala.runtime").moduleClass) + && !(sym.owner == method.symbol.owner && method.symbol.isConstructor) // a call to another constructor + && sym.owner.owner == RuntimePackage.moduleClass) || (sym.isConstructor && inliner.isClosureClass(sym.owner)) /* || definitions.isBox(sym) || definitions.isUnbox(sym)*/) -- cgit v1.2.3