Skip to content

Crasher #39

@VladUreche

Description

@VladUreche
$ cat test-val.scala 

package test.value

@value class Complex(val re: Double, val im: Double) {
  def +(other: Complex): Complex =
    new Complex(re + other.re, im + other.im)
  override def toString = s"$re + $im * i"
}

object Test {
  val c1 = new Complex(0.0, 1.0)
  val c2 = new Complex(1.0, 0.0)

  c1 + c2
}

$ va-scalac test-val.scala 
error: symbol value 21$re does not exist in test.value.Test.<init>
error: scala.reflect.internal.FatalError:
  symbol value 21$re does not exist in test.value.Test.<init>
     while compiling: test-val.scala
        during phase: icode
     library version: version 2.11.1-20140519-130118-1e1defd99c
    compiler version: version 2.11.1-20140519-130118-1e1defd99c
  reconstructed args: -bootclasspath /home/sun/workspace/dev-2.11/valium//components/runtime/target/scala-2.11/valium-runtime_2.11-0.1-SNAPSHOT.jar:/home/sun/workspace/dev-2.11/valium//components/plugin/target/scala-2.11/valium-plugin_2.11-0.1-SNAPSHOT.jar -Xplugin:/home/sun/workspace/dev-2.11/valium//components/plugin/target/scala-2.11/valium-plugin_2.11-0.1-SNAPSHOT.jar

  last tree to typer: Ident(other$$21$im)
       tree position: line 14 of test-val.scala
            tree tpe: Double
              symbol: value 21$im in object Test
   symbol definition: val 21$im: Double (a TermSymbol)
      symbol package: test.value
       symbol owners: value 21$im -> object Test
           call site: constructor Test in object Test in package value

== Source file context for tree position ==

    11     val c2 = new Complex(1.0, 0.0)
    12
    13     c1 + c2
    14   // }
    15 }
    at scala.reflect.internal.SymbolTable.abort(SymbolTable.scala:58)
    at scala.tools.nsc.Global.abort(Global.scala:269)
    at scala.tools.nsc.backend.icode.GenICode$ICodePhase.genLoadIdent$1(GenICode.scala:885)
    at scala.tools.nsc.backend.icode.GenICode$ICodePhase.scala$tools$nsc$backend$icode$GenICode$ICodePhase$$genLoad(GenICode.scala:891)
    at scala.tools.nsc.backend.icode.GenICode$ICodePhase.scala$tools$nsc$backend$icode$GenICode$ICodePhase$$genStat(GenICode.scala:170)
    at scala.tools.nsc.backend.icode.GenICode$ICodePhase$$anonfun$genStat$1.apply(GenICode.scala:155)
    at scala.tools.nsc.backend.icode.GenICode$ICodePhase$$anonfun$genStat$1.apply(GenICode.scala:155)
    at scala.collection.LinearSeqOptimized$class.foldLeft(LinearSeqOptimized.scala:110)
    at scala.collection.immutable.List.foldLeft(List.scala:83)
    at scala.tools.nsc.backend.icode.GenICode$ICodePhase.genStat(GenICode.scala:155)
    at scala.tools.nsc.backend.icode.GenICode$ICodePhase.scala$tools$nsc$backend$icode$GenICode$ICodePhase$$genLoad(GenICode.scala:915)
    at scala.tools.nsc.backend.icode.GenICode$ICodePhase.gen(GenICode.scala:123)
    at scala.tools.nsc.backend.icode.GenICode$ICodePhase$$anonfun$gen$1.apply(GenICode.scala:71)
    at scala.tools.nsc.backend.icode.GenICode$ICodePhase$$anonfun$gen$1.apply(GenICode.scala:71)
    at scala.collection.immutable.List.foreach(List.scala:383)
    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$$anonfun$gen$1.apply(GenICode.scala:71)
    at scala.tools.nsc.backend.icode.GenICode$ICodePhase$$anonfun$gen$1.apply(GenICode.scala:71)
    at scala.collection.immutable.List.foreach(List.scala:383)
    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) 

Maybe useful:

$ va-scalac test-val.scala -Xprint:valium-commit -Ystop-after:valium-commit
[[syntax trees at end of             valium-commit]] // test-val.scala
package test.value {
  @value final class Complex extends Object {
    <paramaccessor> private[this] val re: Double = _;
    <stable> <accessor> <paramaccessor> def re(): Double = Complex.this.re;
    <paramaccessor> private[this] val im: Double = _;
    <stable> <accessor> <paramaccessor> def im(): Double = Complex.this.im;
    def <init>(re: Double, im: Double): test.value.Complex = {
      Complex.super.<init>();
      ()
    };
    def +(other$re: Double, other$im: Double): test.value.Complex = {
      <synthetic> val $$6: test.value.Complex = Complex.this;
      <synthetic> val 1$re: Double = $$6.re;
      <synthetic> val 1$im: Double = $$6.im;
      <synthetic> val this$re$2: Double = 1$re;
      <synthetic> val this$im$3: Double = 1$im;
      <synthetic> val arg$other$re$4: Double = other$re;
      <synthetic> val arg$other$im$5: Double = other$im;
      value.this.Complex.+$xtension(this$re$2, this$im$3, arg$other$re$4, arg$other$im$5)
    };
    override def toString(): String = {
      <synthetic> val $$10: test.value.Complex = Complex.this;
      <synthetic> val 7$re: Double = $$10.re;
      <synthetic> val 7$im: Double = $$10.im;
      <synthetic> val this$re$8: Double = 7$re;
      <synthetic> val this$im$9: Double = 7$im;
      value.this.Complex.toString$xtension(this$re$8, this$im$9)
    };
    override <synthetic> def equals(x$1: Any): Boolean = {
      <synthetic> val $$15: test.value.Complex = Complex.this;
      <synthetic> val 11$re: Double = $$15.re;
      <synthetic> val 11$im: Double = $$15.im;
      <synthetic> val this$re$12: Double = 11$re;
      <synthetic> val this$im$13: Double = 11$im;
      <synthetic> val 14: Any = x$1;
      value.this.Complex.equals$xtension(this$re$12, this$im$13, 14)
    };
    override <synthetic> def hashCode(): Int = {
      <synthetic> val $$19: test.value.Complex = Complex.this;
      <synthetic> val 16$re: Double = $$19.re;
      <synthetic> val 16$im: Double = $$19.im;
      <synthetic> val this$re$17: Double = 16$re;
      <synthetic> val this$im$18: Double = 16$im;
      value.this.Complex.hashCode$xtension(this$re$17, this$im$18)
    }
  };
  <synthetic> object Complex extends Object {
    def <init>(): test.value.Complex.type = {
      Complex.super.<init>();
      ()
    };
    final def +$xtension($this$re: Double, $this$im: Double, other$re: Double, other$im: Double): test.value.Complex = new test.value.Complex($this$re.+(other$re), $this$im.+(other$im));
    final def toString$xtension($this$re: Double, $this$im: Double): String = new StringContext(scala.this.Predef.wrapRefArray[String](Array[String]{"", " + ", " * i"})).s(scala.this.Predef.genericWrapArray[Any](Array[Any]{$this$re, $this$im}));
    final <synthetic> def equals$xtension($this$re: Double, $this$im: Double, x$1: Any): Boolean = x$1.isInstanceOf[test.value.Complex]().&&({
      <synthetic> val $$20: test.value.Complex = x$1.asInstanceOf[test.value.Complex]();
      <synthetic> val Complex$1$re: Double = $$20.re;
      <synthetic> val Complex$1$im: Double = $$20.im;
      $this$re.==(Complex$1$re).&&($this$im.==(Complex$1$im))
    });
    final <synthetic> def hashCode$xtension($this$re: Double, $this$im: Double): Int = -1679819632.+($this$re.hashCode()).+($this$im.hashCode())
  };
  object Test extends Object {
    def <init>(): test.value.Test.type = {
      Test.super.<init>();
      ()
    };
    <synthetic> private[this] val c1$re: Double = 0.0;
    <synthetic> private[this] val c1$im: Double = 1.0;
    <stable> <accessor> def c1(): test.value.Complex = new test.value.Complex(Test.this.c1$re, Test.this.c1$im);
    <synthetic> private[this] val c2$re: Double = 1.0;
    <synthetic> private[this] val c2$im: Double = 0.0;
    <stable> <accessor> def c2(): test.value.Complex = new test.value.Complex(Test.this.c2$re, Test.this.c2$im);
    <synthetic> val $$24: test.value.Complex = Test.this.c2();
    <synthetic> val 21$re: Double = Test.this.$$24.re;
    <synthetic> val 21$im: Double = Test.this.$$24.im;
    <synthetic> val arg$other$re$22: Double = 21$re;
    <synthetic> val arg$other$im$23: Double = 21$im;
    Test.this.c1().+(arg$other$re$22, arg$other$im$23)
  }
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions