Skip to content

Commit 00d7bc8

Browse files
committed
Better diagnostic for optimizer crashes
1 parent fac98f5 commit 00d7bc8

File tree

1 file changed

+9
-3
lines changed

1 file changed

+9
-3
lines changed

src/compiler/scala/tools/nsc/backend/jvm/analysis/BackendUtils.scala

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,12 @@ import scala.annotation.switch
66
import scala.tools.asm.{Handle, Type}
77
import scala.tools.asm.Opcodes._
88
import scala.tools.asm.tree._
9-
import scala.tools.asm.tree.analysis.{Frame, BasicInterpreter, Analyzer, Value}
9+
import scala.tools.asm.tree.analysis._
1010
import GenBCode._
1111
import scala.tools.nsc.backend.jvm.BTypes._
1212
import scala.tools.nsc.backend.jvm.opt.BytecodeUtils._
1313
import java.lang.invoke.LambdaMetafactory
14+
1415
import scala.collection.mutable
1516
import scala.collection.JavaConverters._
1617

@@ -32,8 +33,13 @@ class BackendUtils[BT <: BTypes](val btypes: BT) {
3233
*/
3334
class AsmAnalyzer[V <: Value](methodNode: MethodNode, classInternalName: InternalName, val analyzer: Analyzer[V] = new Analyzer(new BasicInterpreter)) {
3435
computeMaxLocalsMaxStack(methodNode)
35-
analyzer.analyze(classInternalName, methodNode)
36-
def frameAt(instruction: AbstractInsnNode): Frame[V] = analyzer.frameAt(instruction, methodNode)
36+
try {
37+
analyzer.analyze(classInternalName, methodNode)
38+
} catch {
39+
case ae: AnalyzerException =>
40+
throw new AnalyzerException(null, "While processing " + classInternalName + "." + methodNode.name, ae)
41+
}
42+
def frameAt(instruction: AbstractInsnNode): Frame[V] = analyzer.frameAt(instruction, methodNode)
3743
}
3844

3945
/**

0 commit comments

Comments
 (0)