summaryrefslogtreecommitdiff
path: root/src/test
diff options
context:
space:
mode:
authorJared Barocsi2021-07-28 14:53:04 -0700
committerGitHub2021-07-28 14:53:04 -0700
commit0666933b3e902192ef57723a92b57d41d50b3f8e (patch)
treef2fa2add2abc897b0cca458876bfd0adac80f0cd /src/test
parente3d245e0bfaf164996fac655b2da0818e1ad37d0 (diff)
Bundles can no longer be instantiated with bound hardware (#2046)
Co-authored-by: Jack Koenig <koenig@sifive.com>
Diffstat (limited to 'src/test')
-rw-r--r--src/test/scala/chiselTests/BundleSpec.scala34
1 files changed, 21 insertions, 13 deletions
diff --git a/src/test/scala/chiselTests/BundleSpec.scala b/src/test/scala/chiselTests/BundleSpec.scala
index 5d3f23ec..1d392f5c 100644
--- a/src/test/scala/chiselTests/BundleSpec.scala
+++ b/src/test/scala/chiselTests/BundleSpec.scala
@@ -129,6 +129,27 @@ class BundleSpec extends ChiselFlatSpec with BundleSpecUtils with Utils {
}).getMessage should include("aliased fields")
}
+ "Bundles" should "not have bound hardware" in {
+ (the[ChiselException] thrownBy extractCause[ChiselException] {
+ ChiselStage.elaborate { new Module {
+ class MyBundle(val foo: UInt) extends Bundle
+ val in = IO(Input(new MyBundle(123.U))) // This should error: value passed in instead of type
+ val out = IO(Output(new MyBundle(UInt(8.W))))
+
+ out := in
+ } }
+ }).getMessage should include("must be a Chisel type, not hardware")
+ }
+ "Bundles" should "not recursively contain aggregates with bound hardware" in {
+ (the[ChiselException] thrownBy extractCause[ChiselException] {
+ ChiselStage.elaborate { new Module {
+ class MyBundle(val foo: UInt) extends Bundle
+ val out = IO(Output(Vec(2, UInt(8.W))))
+ val in = IO(Input(new MyBundle(out(0)))) // This should error: Bound aggregate passed
+ out := in
+ } }
+ }).getMessage should include("must be a Chisel type, not hardware")
+ }
"Unbound bundles sharing a field" should "not error" in {
ChiselStage.elaborate {
new RawModule {
@@ -141,17 +162,4 @@ class BundleSpec extends ChiselFlatSpec with BundleSpecUtils with Utils {
}
}
}
-
- "Bound Data" should "have priority in setting ref over unbound Data" in {
- class MyModule extends RawModule {
- val foo = IO(new Bundle {
- val x = Output(UInt(8.W))
- })
- foo.x := 0.U // getRef on foo.x is None.get without fix
- val bar = new Bundle {
- val y = foo.x
- }
- }
- ChiselStage.emitChirrtl(new MyModule)
- }
}