summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Zaugg <jzaugg@gmail.com>2016-06-06 14:24:38 +1000
committerAdriaan Moors <adriaan.moors@typesafe.com>2016-06-28 09:18:34 -0700
commit9f54af3270396724928b335ba8d14282973898fd (patch)
treefdf6e05c8e2c4f2413236fdbf4d29f9ad4167496
parent367bab451415d8d4c78253e1aa60cb5301ac0a93 (diff)
downloadscala-9f54af3270396724928b335ba8d14282973898fd.tar.gz
scala-9f54af3270396724928b335ba8d14282973898fd.tar.bz2
scala-9f54af3270396724928b335ba8d14282973898fd.zip
Better diagnostic for optimizer crashes
-rw-r--r--src/compiler/scala/tools/nsc/backend/jvm/analysis/BackendUtils.scala12
1 files changed, 9 insertions, 3 deletions
diff --git a/src/compiler/scala/tools/nsc/backend/jvm/analysis/BackendUtils.scala b/src/compiler/scala/tools/nsc/backend/jvm/analysis/BackendUtils.scala
index 9abd1d8006..513c71fe2e 100644
--- a/src/compiler/scala/tools/nsc/backend/jvm/analysis/BackendUtils.scala
+++ b/src/compiler/scala/tools/nsc/backend/jvm/analysis/BackendUtils.scala
@@ -6,11 +6,12 @@ import scala.annotation.switch
import scala.tools.asm.{Handle, Type}
import scala.tools.asm.Opcodes._
import scala.tools.asm.tree._
-import scala.tools.asm.tree.analysis.{Frame, BasicInterpreter, Analyzer, Value}
+import scala.tools.asm.tree.analysis._
import GenBCode._
import scala.tools.nsc.backend.jvm.BTypes._
import scala.tools.nsc.backend.jvm.opt.BytecodeUtils._
import java.lang.invoke.LambdaMetafactory
+
import scala.collection.mutable
import scala.collection.JavaConverters._
@@ -32,8 +33,13 @@ class BackendUtils[BT <: BTypes](val btypes: BT) {
*/
class AsmAnalyzer[V <: Value](methodNode: MethodNode, classInternalName: InternalName, val analyzer: Analyzer[V] = new Analyzer(new BasicInterpreter)) {
computeMaxLocalsMaxStack(methodNode)
- analyzer.analyze(classInternalName, methodNode)
- def frameAt(instruction: AbstractInsnNode): Frame[V] = analyzer.frameAt(instruction, methodNode)
+ try {
+ analyzer.analyze(classInternalName, methodNode)
+ } catch {
+ case ae: AnalyzerException =>
+ throw new AnalyzerException(null, "While processing " + classInternalName + "." + methodNode.name, ae)
+ }
+ def frameAt(instruction: AbstractInsnNode): Frame[V] = analyzer.frameAt(instruction, methodNode)
}
/**