Skip to content

Instantly share code, notes, and snippets.

@retronym
Last active August 29, 2015 14:01
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save retronym/ccdca4c9085b36964ebb to your computer and use it in GitHub Desktop.
Save retronym/ccdca4c9085b36964ebb to your computer and use it in GitHub Desktop.
% qbin/scalac -Ydebug -Ylog:icode -Ylinearizer:rpo sandbox/test.scala 2>&1 | tee sandbox/bad.txt
% qbin/scalac -Ydebug -Ylog:icode -Ydisable-unreachable-prevention -Ylinearizer:rpo sandbox/test.scala 2>&1 | tee sandbox/good.txt
% diff -U1000 sandbox/{good,bad}.txt | gist
--- sandbox/good.txt 2014-05-26 18:10:48.000000000 +0200
+++ sandbox/bad.txt 2014-05-26 18:10:41.000000000 +0200
@@ -1,93 +1,184 @@
[running phase parser on test.scala]
[running phase namer on test.scala]
[running phase packageobjects on test.scala]
[running phase typer on test.scala]
[running phase patmat on test.scala]
[running phase superaccessors on test.scala]
[running phase extmethods on test.scala]
[running phase pickler on test.scala]
[running phase refchecks on test.scala]
[running phase uncurry on test.scala]
[running phase tailcalls on test.scala]
[running phase specialize on test.scala]
[running phase explicitouter on test.scala]
[running phase erasure on test.scala]
[running phase posterasure on test.scala]
[running phase lazyvals on test.scala]
[running phase lambdalift on test.scala]
[running phase constructors on test.scala]
[running phase flatten on test.scala]
[running phase mixin on test.scala]
[running phase cleanup on test.scala]
[running phase delambdafy on test.scala]
[log icode] [class] >> scala.Array
[log icode] [class] << scala.Array
[log icode] ClassfileLoader setting Array.associatedFile = /Users/jason/code/scala/build/quick/classes/library/scala/Array.class
[log icode(->parser)] [class] >> java.lang.Cloneable
[log icode(->parser)] ClassfileLoader setting Cloneable.associatedFile = /Library/Java/JavaVirtualMachines/1.6.0_65-b14-462.jdk/Contents/Classes/classes.jar(java/lang/Cloneable.class)
[running phase icode on test.scala]
[log icode] Generating class: CompilerBug
[log icode] Entering method test
[log icode] at line: 3
[log icode(-><some phase>)] [class] >> scala.AnyValCompanion
[log icode(-><some phase>)] [class] << scala.AnyValCompanion
[log icode(-><some phase>)] ClassfileLoader setting AnyValCompanion.associatedFile = /Users/jason/code/scala/build/quick/classes/library/scala/AnyValCompanion.class
[log icode(-><some phase>)] [class] >> scala.Specializable
[log icode(-><some phase>)] [class] << scala.Specializable
[log icode(-><some phase>)] ClassfileLoader setting Specializable.associatedFile = /Users/jason/code/scala/build/quick/classes/library/scala/Specializable.class
[log icode] Entering genCond with tree: a.$bar$bar(scala.this.Predef.$qmark$qmark$qmark()).$amp$amp(b.$bar$bar(scala.this.Predef.$qmark$qmark$qmark()))
[log icode] Entering genCond with tree: a.$bar$bar(scala.this.Predef.$qmark$qmark$qmark())
[log icode] Entering genCond with tree: a
[log icode] at line: 3
[log icode] Entering genCond with tree: scala.this.Predef.$qmark$qmark$qmark()
[log icode] at line: 3
[log icode] Gen CALL_METHOD with sym: method $qmark$qmark$qmark isStaticSymbol: false
[log icode] at line: 3
[log icode] Host class of module Predef with qual scala.this (type) is package class scala
[log icode] LOAD_MODULE from Select: module Predef
[log icode] re-enter class ArrowAssoc in module class Predef
[log icode(->mixin ->mixin)] In scope of package class scala, unlinked class Predef$ArrowAssoc
[log icode] re-enter class Ensuring in module class Predef
[log icode(->mixin ->mixin)] In scope of package class scala, unlinked class Predef$Ensuring
[log icode] re-enter class StringFormat in module class Predef
[log icode(->mixin ->mixin)] In scope of package class scala, unlinked class Predef$StringFormat
[log icode] re-enter class StringAdd in module class Predef
[log icode(->mixin ->mixin)] In scope of package class scala, unlinked class Predef$StringAdd
[log icode] re-enter class any2stringadd in module class Predef
[log icode(->mixin ->mixin)] In scope of package class scala, unlinked class Predef$any2stringadd
[log icode] re-enter class RichException in module class Predef
[log icode(->mixin ->mixin)] In scope of package class scala, unlinked class Predef$RichException
[log icode] re-enter class SeqCharSequence in module class Predef
[log icode(->mixin ->mixin)] In scope of package class scala, unlinked class Predef$SeqCharSequence
[log icode] re-enter class ArrayCharSequence in module class Predef
[log icode(->mixin ->mixin)] In scope of package class scala, unlinked class Predef$ArrayCharSequence
[log icode] re-enter class $less$colon$less in module class Predef
[log icode(->mixin ->mixin)] In scope of package class scala, unlinked class less$colon$less
[log icode] re-enter class $eq$colon$eq in module class Predef
[log icode(->mixin ->mixin)] In scope of package class scala, unlinked class eq$colon$eq
[log icode] re-enter class DummyImplicit in module class Predef
[log icode(->mixin ->mixin)] In scope of package class scala, unlinked class Predef$DummyImplicit
[log icode(->posterasure)] trait DeprecatedPredef in package class scala impl class is DeprecatedPredef$class
[log icode] GenICode#adaptNullRef(REF(class Nothing), BOOL, package <empty> { class CompilerBug { def CompilerBug.test { bb=6 } } }, source-/Users/jason/code/scala/sandbox/test.scala,line-3,offset=71)
[log icode] GenICode#adapt(REF(class Nothing), BOOL, package <empty> { class CompilerBug { def CompilerBug.test { bb=6 } } }, source-/Users/jason/code/scala/sandbox/test.scala,line-3,offset=71)
[log icode] Ignoring instruction, possibly at our peril, at source-/Users/jason/code/scala/sandbox/test.scala,line-3,offset=71: CZJUMP (BOOL)NE ? 5 : 3
-[log icode] Entering genCond with tree: b.$bar$bar(scala.this.Predef.$qmark$qmark$qmark())
-[log icode] Entering genCond with tree: b
-[log icode] at line: 3
-[log icode] Entering genCond with tree: scala.this.Predef.$qmark$qmark$qmark()
-[log icode] at line: 3
-[log icode] Gen CALL_METHOD with sym: method $qmark$qmark$qmark isStaticSymbol: false
-[log icode] at line: 3
-[log icode] Host class of module Predef with qual scala.this (type) is package class scala
-[log icode] LOAD_MODULE from Select: module Predef
-[log icode] GenICode#adaptNullRef(REF(class Nothing), BOOL, package <empty> { class CompilerBug { def CompilerBug.test { bb=7 } } }, source-/Users/jason/code/scala/sandbox/test.scala,line-3,offset=85)
-[log icode] GenICode#adapt(REF(class Nothing), BOOL, package <empty> { class CompilerBug { def CompilerBug.test { bb=7 } } }, source-/Users/jason/code/scala/sandbox/test.scala,line-3,offset=85)
-[log icode] Ignoring instruction, possibly at our peril, at source-/Users/jason/code/scala/sandbox/test.scala,line-3,offset=85: CZJUMP (BOOL)NE ? 2 : 3
-[log icode] Prune fixpoint reached in 1 iterations.
-[log icode] Entering method <init>
-[log icode] at line: 5
-[log icode] at line: 5
-[log icode] Call to super: CompilerBug.super.<init>()
-[log icode] at line: 1
-[log icode] Prune fixpoint reached in 1 iterations.
-[running phase jvm on icode]
+[log icode] Killing block 5
+error: java.lang.AssertionError: assertion failed:
+ Killing block 5 which is referred to from 1
+ while compiling: sandbox/test.scala
+ during phase: icode
+ library version: version 2.11.1-20140526-112339-acbfbb3ef7
+ compiler version: version 2.11.1-20140526-112339-acbfbb3ef7
+ reconstructed args: -Ydebug -Ylog:icode
+
+ last tree to typer: type CompilerBug
+ tree position: line 1 of sandbox/test.scala
+ tree tpe: <notype>
+ symbol: <module> module class CompilerBug
+ symbol definition: <module> class CompilerBug extends lang.this.Object (a ModuleClassSymbol)
+ symbol package: <empty>
+ symbol owners: module class CompilerBug
+ call site: primary constructor CompilerBug in module class CompilerBug in package <empty>
+
+== Source file context for tree position ==
+
+ 0 object CompilerBug {
+ 1 def test(a: Boolean, b: Boolean) = {
+ 2 ((a || ???) && (b || ???))
+ 3 }
+ 4 }
+ at scala.tools.nsc.backend.icode.BasicBlocks$BasicBlock.killIf(BasicBlocks.scala:411)
+ at scala.tools.nsc.backend.icode.BasicBlocks$BasicBlock.killUnless(BasicBlocks.scala:422)
+ at scala.tools.nsc.backend.icode.GenICode$ICodePhase.genZandOrZor$1(GenICode.scala:1429)
+ at scala.tools.nsc.backend.icode.GenICode$ICodePhase.genCond(GenICode.scala:1441)
+ at scala.tools.nsc.backend.icode.GenICode$ICodePhase.genPrimitiveOp(GenICode.scala:442)
+ at scala.tools.nsc.backend.icode.GenICode$ICodePhase.genLoadApply6$1(GenICode.scala:764)
+ at scala.tools.nsc.backend.icode.GenICode$ICodePhase.scala$tools$nsc$backend$icode$GenICode$ICodePhase$$genLoad(GenICode.scala:809)
+ at scala.tools.nsc.backend.icode.GenICode$ICodePhase.gen(GenICode.scala:123)
+ at scala.tools.nsc.backend.icode.GenICode$ICodePhase.gen(GenICode.scala:71)
+ at scala.tools.nsc.backend.icode.GenICode$ICodePhase.gen(GenICode.scala:148)
+ at scala.tools.nsc.backend.icode.GenICode$ICodePhase.gen(GenICode.scala:98)
+ at scala.tools.nsc.backend.icode.GenICode$ICodePhase.gen(GenICode.scala:71)
+ at scala.tools.nsc.backend.icode.GenICode$ICodePhase.gen(GenICode.scala:89)
+ at scala.tools.nsc.backend.icode.GenICode$ICodePhase.gen(GenICode.scala:67)
+ at scala.tools.nsc.backend.icode.GenICode$ICodePhase.apply(GenICode.scala:63)
+ at scala.tools.nsc.Global$GlobalPhase.applyPhase(Global.scala:430)
+ at scala.tools.nsc.Global$GlobalPhase$$anonfun$run$1.apply(Global.scala:397)
+ at scala.tools.nsc.Global$GlobalPhase$$anonfun$run$1.apply(Global.scala:397)
+ at scala.collection.Iterator$class.foreach(Iterator.scala:743)
+ at scala.collection.AbstractIterator.foreach(Iterator.scala:1174)
+ at scala.tools.nsc.Global$GlobalPhase.run(Global.scala:397)
+ at scala.tools.nsc.backend.icode.GenICode$ICodePhase.run(GenICode.scala:55)
+ at scala.tools.nsc.Global$Run.compileUnitsInternal(Global.scala:1625)
+ at scala.tools.nsc.Global$Run.compileUnits(Global.scala:1610)
+ at scala.tools.nsc.Global$Run.compileSources(Global.scala:1605)
+ at scala.tools.nsc.Global$Run.compile(Global.scala:1703)
+ at scala.tools.nsc.Driver.doCompile(Driver.scala:34)
+ at scala.tools.nsc.MainClass.doCompile(Main.scala:23)
+ at scala.tools.nsc.Driver.process(Driver.scala:55)
+ at scala.tools.nsc.Driver.main(Driver.scala:68)
+ at scala.tools.nsc.Main.main(Main.scala)
+Exception in thread "main" java.lang.AssertionError: assertion failed:
+ Killing block 5 which is referred to from 1
+ while compiling: sandbox/test.scala
+ during phase: icode
+ library version: version 2.11.1-20140526-112339-acbfbb3ef7
+ compiler version: version 2.11.1-20140526-112339-acbfbb3ef7
+ reconstructed args: -Ydebug -Ylog:icode
+
+ last tree to typer: type CompilerBug
+ tree position: line 1 of sandbox/test.scala
+ tree tpe: <notype>
+ symbol: <module> module class CompilerBug
+ symbol definition: <module> class CompilerBug extends lang.this.Object (a ModuleClassSymbol)
+ symbol package: <empty>
+ symbol owners: module class CompilerBug
+ call site: primary constructor CompilerBug in module class CompilerBug in package <empty>
+
+== Source file context for tree position ==
+
+ 0 object CompilerBug {
+ 1 def test(a: Boolean, b: Boolean) = {
+ 2 ((a || ???) && (b || ???))
+ 3 }
+ 4 }
+ at scala.tools.nsc.backend.icode.BasicBlocks$BasicBlock.killIf(BasicBlocks.scala:411)
+ at scala.tools.nsc.backend.icode.BasicBlocks$BasicBlock.killUnless(BasicBlocks.scala:422)
+ at scala.tools.nsc.backend.icode.GenICode$ICodePhase.genZandOrZor$1(GenICode.scala:1429)
+ at scala.tools.nsc.backend.icode.GenICode$ICodePhase.genCond(GenICode.scala:1441)
+ at scala.tools.nsc.backend.icode.GenICode$ICodePhase.genPrimitiveOp(GenICode.scala:442)
+ at scala.tools.nsc.backend.icode.GenICode$ICodePhase.genLoadApply6$1(GenICode.scala:764)
+ at scala.tools.nsc.backend.icode.GenICode$ICodePhase.scala$tools$nsc$backend$icode$GenICode$ICodePhase$$genLoad(GenICode.scala:809)
+ at scala.tools.nsc.backend.icode.GenICode$ICodePhase.gen(GenICode.scala:123)
+ at scala.tools.nsc.backend.icode.GenICode$ICodePhase.gen(GenICode.scala:71)
+ at scala.tools.nsc.backend.icode.GenICode$ICodePhase.gen(GenICode.scala:148)
+ at scala.tools.nsc.backend.icode.GenICode$ICodePhase.gen(GenICode.scala:98)
+ at scala.tools.nsc.backend.icode.GenICode$ICodePhase.gen(GenICode.scala:71)
+ at scala.tools.nsc.backend.icode.GenICode$ICodePhase.gen(GenICode.scala:89)
+ at scala.tools.nsc.backend.icode.GenICode$ICodePhase.gen(GenICode.scala:67)
+ at scala.tools.nsc.backend.icode.GenICode$ICodePhase.apply(GenICode.scala:63)
+ at scala.tools.nsc.Global$GlobalPhase.applyPhase(Global.scala:430)
+ at scala.tools.nsc.Global$GlobalPhase$$anonfun$run$1.apply(Global.scala:397)
+ at scala.tools.nsc.Global$GlobalPhase$$anonfun$run$1.apply(Global.scala:397)
+ at scala.collection.Iterator$class.foreach(Iterator.scala:743)
+ at scala.collection.AbstractIterator.foreach(Iterator.scala:1174)
+ at scala.tools.nsc.Global$GlobalPhase.run(Global.scala:397)
+ at scala.tools.nsc.backend.icode.GenICode$ICodePhase.run(GenICode.scala:55)
+ at scala.tools.nsc.Global$Run.compileUnitsInternal(Global.scala:1625)
+ at scala.tools.nsc.Global$Run.compileUnits(Global.scala:1610)
+ at scala.tools.nsc.Global$Run.compileSources(Global.scala:1605)
+ at scala.tools.nsc.Global$Run.compile(Global.scala:1703)
+ at scala.tools.nsc.Driver.doCompile(Driver.scala:34)
+ at scala.tools.nsc.MainClass.doCompile(Main.scala:23)
+ at scala.tools.nsc.Driver.process(Driver.scala:55)
+ at scala.tools.nsc.Driver.main(Driver.scala:68)
+ at scala.tools.nsc.Main.main(Main.scala)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment