chipsalliance / firrtl

Flexible Intermediate Representation for RTL
https://www.chisel-lang.org/firrtl/
Apache License 2.0
720 stars 176 forks source link

crash 124 #2127

Open drom opened 3 years ago

drom commented 3 years ago

Checklist

What is the current behavior?

The following FIRRTL program.

; seed: 124
circuit top_mod :
  module top_mod :
    input inp_a: {inp_b: {inp_c: {inp_d: {inp_h: SInt<1>}, inp_f: {inp_i: UInt<20>}}, inp_j: SInt<8>}}
    output tmp30: SInt<22>
    wire tmp10: SInt<21>
    wire _tmp18: SInt<1>
    tmp10 <= asSInt(UInt<21>("b1011100101111111111"))
    _tmp18 <= rem(inp_a.inp_b.inp_c.inp_d.inp_h, SInt<15>(14326))
    tmp30 <= mul(_tmp18, tmp10)

Running with firrtl-1.5.0-SNAPSHOT crashes with the following error:

Exception in thread "main" firrtl.FirrtlInternalException: Internal Error! Unexpected non-SInt type for Reference(_tmp18,UIntType(IntWidth(1)),NodeKind,SourceFlow) in DoPrim(mul,List(Reference(_tmp18,UIntType(IntWidth(1)),NodeKind,SourceFlow), SIntLiteral(379903,IntWidth(21))),List(),UnknownType)
Please file an issue at https://github.com/ucb-bar/firrtl/issues
        at firrtl.Utils$.error(Utils.scala:491)
        at firrtl.Utils$.throwInternalError(Utils.scala:164)
        at firrtl.VerilogEmitter.castIf$1(VerilogEmitter.scala:279)
        at firrtl.VerilogEmitter.op_stream(VerilogEmitter.scala:317)
        at firrtl.VerilogEmitter.emitCol(VerilogEmitter.scala:165)
        at firrtl.VerilogEmitter.$anonfun$emitCol$2(VerilogEmitter.scala:204)
        at firrtl.VerilogEmitter.$anonfun$emitCol$2$adapted(VerilogEmitter.scala:203)
        at scala.collection.LinearSeqOps.foldLeft(LinearSeq.scala:169)
        at scala.collection.LinearSeqOps.foldLeft$(LinearSeq.scala:165)
        at scala.collection.immutable.List.foldLeft(List.scala:79)
        at firrtl.VerilogEmitter.emitCol(VerilogEmitter.scala:203)
        at firrtl.VerilogEmitter.$anonfun$emitCol$2(VerilogEmitter.scala:204)
        at firrtl.VerilogEmitter.$anonfun$emitCol$2$adapted(VerilogEmitter.scala:203)
        at scala.collection.LinearSeqOps.foldLeft(LinearSeq.scala:169)
        at scala.collection.LinearSeqOps.foldLeft$(LinearSeq.scala:165)
        at scala.collection.immutable.List.foldLeft(List.scala:79)
        at firrtl.VerilogEmitter.emitCol(VerilogEmitter.scala:203)
        at firrtl.VerilogEmitter.emit(VerilogEmitter.scala:131)
        at firrtl.VerilogEmitter$VerilogRender.$anonfun$emit_streams$8(VerilogEmitter.scala:1115)
        at firrtl.VerilogEmitter$VerilogRender.$anonfun$emit_streams$8$adapted(VerilogEmitter.scala:1115)
        at scala.collection.IterableOnceOps.foreach(IterableOnce.scala:563)
        at scala.collection.IterableOnceOps.foreach$(IterableOnce.scala:561)
        at scala.collection.AbstractIterable.foreach(Iterable.scala:919)
        at firrtl.VerilogEmitter$VerilogRender.emit_streams(VerilogEmitter.scala:1115)
        at firrtl.VerilogEmitter$VerilogRender.emit_verilog(VerilogEmitter.scala:1233)
        at firrtl.VerilogEmitter.$anonfun$emit$2(VerilogEmitter.scala:1274)
        at scala.collection.immutable.List.foreach(List.scala:333)
        at firrtl.VerilogEmitter.emit(VerilogEmitter.scala:1268)
        at firrtl.VerilogEmitter.$anonfun$execute$2(VerilogEmitter.scala:1286)
        at scala.collection.immutable.List.flatMap(List.scala:293)
        at scala.collection.immutable.List.flatMap(List.scala:79)
        at firrtl.VerilogEmitter.execute(VerilogEmitter.scala:1283)
        at firrtl.SystemVerilogEmitter.execute(SystemVerilogEmitter.scala:29)
        at firrtl.Transform.transform(Compiler.scala:319)
        at firrtl.Transform.transform$(Compiler.scala:319)
        at firrtl.SeqTransform.transform(Compiler.scala:401)
        at firrtl.stage.transforms.ExpandPrepares.execute(ExpandPrepares.scala:19)
        at firrtl.Transform.transform(Compiler.scala:319)
        at firrtl.Transform.transform$(Compiler.scala:319)
        at firrtl.stage.transforms.ExpandPrepares.transform(ExpandPrepares.scala:7)
        at firrtl.stage.transforms.CatchCustomTransformExceptions.execute(CatchCustomTransformExceptions.scala:10)
        at firrtl.Transform.transform(Compiler.scala:319)
        at firrtl.Transform.transform$(Compiler.scala:319)
        at firrtl.stage.transforms.CatchCustomTransformExceptions.transform(CatchCustomTransformExceptions.scala:7)
        at firrtl.stage.transforms.UpdateAnnotations.$anonfun$internalTransform$1(UpdateAnnotations.scala:22)
        at firrtl.Utils$.time(Utils.scala:170)
        at firrtl.Transform$.runTransform(Compiler.scala:217)
        at firrtl.stage.transforms.UpdateAnnotations.internalTransform(UpdateAnnotations.scala:22)
        at firrtl.stage.transforms.UpdateAnnotations.internalTransform(UpdateAnnotations.scala:8)
        at firrtl.options.Translator.transform(Phase.scala:248)
        at firrtl.options.Translator.transform$(Phase.scala:248)
        at firrtl.stage.transforms.UpdateAnnotations.transform(UpdateAnnotations.scala:8)
        at firrtl.options.DependencyManager.$anonfun$transform$3(DependencyManager.scala:278)
        at scala.collection.LinearSeqOps.foldLeft(LinearSeq.scala:169)
        at scala.collection.LinearSeqOps.foldLeft$(LinearSeq.scala:165)
        at scala.collection.immutable.List.foldLeft(List.scala:79)
        at firrtl.options.DependencyManager.transform(DependencyManager.scala:269)
        at firrtl.options.DependencyManager.transform$(DependencyManager.scala:255)
        at firrtl.stage.TransformManager.transform(TransformManager.scala:14)
        at firrtl.stage.phases.Compiler.$anonfun$internalTransform$6(Compiler.scala:120)
        at firrtl.Utils$.time(Utils.scala:170)
        at firrtl.stage.phases.Compiler.f$1(Compiler.scala:120)
        at firrtl.stage.phases.Compiler.$anonfun$internalTransform$8(Compiler.scala:125)
        at scala.collection.immutable.List.map(List.scala:246)
        at scala.collection.immutable.List.map(List.scala:79)
        at firrtl.stage.phases.Compiler.internalTransform(Compiler.scala:125)
        at firrtl.stage.phases.Compiler.internalTransform(Compiler.scala:45)
        at firrtl.options.Translator.transform(Phase.scala:248)
        at firrtl.options.Translator.transform$(Phase.scala:248)
        at firrtl.stage.phases.Compiler.transform(Compiler.scala:45)
        at firrtl.stage.phases.CatchExceptions.transform(CatchExceptions.scala:30)
        at firrtl.stage.phases.CatchExceptions.transform(CatchExceptions.scala:17)
        at firrtl.options.phases.DeletedWrapper.internalTransform(DeletedWrapper.scala:38)
        at firrtl.options.phases.DeletedWrapper.internalTransform(DeletedWrapper.scala:15)
        at firrtl.options.Translator.transform(Phase.scala:248)
        at firrtl.options.Translator.transform$(Phase.scala:248)
        at firrtl.options.phases.DeletedWrapper.transform(DeletedWrapper.scala:15)
        at firrtl.options.DependencyManager.$anonfun$transform$3(DependencyManager.scala:278)
        at scala.collection.LinearSeqOps.foldLeft(LinearSeq.scala:169)
        at scala.collection.LinearSeqOps.foldLeft$(LinearSeq.scala:165)
        at scala.collection.immutable.List.foldLeft(List.scala:79)
        at firrtl.options.DependencyManager.transform(DependencyManager.scala:269)
        at firrtl.options.DependencyManager.transform$(DependencyManager.scala:255)
        at firrtl.options.PhaseManager.transform(DependencyManager.scala:436)
        at firrtl.stage.FirrtlStage.run(FirrtlStage.scala:38)
        at firrtl.options.Stage$$anon$1.transform(Stage.scala:43)
        at firrtl.options.Stage$$anon$1.transform(Stage.scala:43)
        at firrtl.options.phases.DeletedWrapper.internalTransform(DeletedWrapper.scala:38)
        at firrtl.options.phases.DeletedWrapper.internalTransform(DeletedWrapper.scala:15)
        at firrtl.options.Translator.transform(Phase.scala:248)
        at firrtl.options.Translator.transform$(Phase.scala:248)
        at firrtl.options.phases.DeletedWrapper.transform(DeletedWrapper.scala:15)
        at firrtl.options.Stage.$anonfun$transform$5(Stage.scala:47)
        at scala.collection.LinearSeqOps.foldLeft(LinearSeq.scala:169)
        at scala.collection.LinearSeqOps.foldLeft$(LinearSeq.scala:165)
        at scala.collection.immutable.List.foldLeft(List.scala:79)
        at firrtl.options.Stage.$anonfun$transform$3(Stage.scala:47)
        at logger.Logger$.$anonfun$makeScope$2(Logger.scala:166)
        at scala.util.DynamicVariable.withValue(DynamicVariable.scala:59)
        at logger.Logger$.makeScope(Logger.scala:164)
        at firrtl.options.Stage.transform(Stage.scala:47)
        at firrtl.options.Stage.execute(Stage.scala:58)
        at firrtl.options.StageMain.main(Stage.scala:71)
        at firrtl.stage.FirrtlMain.main(FirrtlStage.scala)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:566)
        at coursier.bootstrap.launcher.a.a(Unknown Source)
        at coursier.bootstrap.launcher.Launcher.main(Unknown Source)

What is the expected behavior?

Not to crash. Give a more informative Error or Warning or just work.

Steps to Reproduce

./firrtl-1.5.0-SNAPSHOT -i top_mod.fir

Your environment

Linux linux-sydi 5.11.4-1-default #1 SMP Mon Mar 8 05:16:55 UTC 2021 (be77cd2) x86_64 x86_64 x86_64 GNU/Linux

External Information

drom commented 3 years ago

still crashing