summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main/scala/chisel3/aop/Select.scala4
-rw-r--r--src/test/scala/chiselTests/RecordSpec.scala13
2 files changed, 15 insertions, 2 deletions
diff --git a/src/main/scala/chisel3/aop/Select.scala b/src/main/scala/chisel3/aop/Select.scala
index 3a2a8931..738d6f31 100644
--- a/src/main/scala/chisel3/aop/Select.scala
+++ b/src/main/scala/chisel3/aop/Select.scala
@@ -26,7 +26,7 @@ object Select {
* @param d Component to find leafs if aggregate typed. Intermediate fields/indicies are not included
*/
def getLeafs(d: Data): Seq[Data] = d match {
- case r: Record => r.getElements.flatMap(getLeafs)
+ case r: Record => r.elementsIterator.flatMap(getLeafs).toSeq
case v: Vec[_] => v.getElements.flatMap(getLeafs)
case other => Seq(other)
}
@@ -36,7 +36,7 @@ object Select {
* @param d Component to find leafs if aggregate typed. Intermediate fields/indicies ARE included
*/
def getIntermediateAndLeafs(d: Data): Seq[Data] = d match {
- case r: Record => r +: r.getElements.flatMap(getIntermediateAndLeafs)
+ case r: Record => r +: r.elementsIterator.flatMap(getIntermediateAndLeafs).toSeq
case v: Vec[_] => v +: v.getElements.flatMap(getIntermediateAndLeafs)
case other => Seq(other)
}
diff --git a/src/test/scala/chiselTests/RecordSpec.scala b/src/test/scala/chiselTests/RecordSpec.scala
index cde18da7..509edbbc 100644
--- a/src/test/scala/chiselTests/RecordSpec.scala
+++ b/src/test/scala/chiselTests/RecordSpec.scala
@@ -325,4 +325,17 @@ class RecordSpec extends ChiselFlatSpec with RecordSpecUtils with Utils {
"CustomBundle" should "check the types" in {
ChiselStage.elaborate { new RecordTypeTester }
}
+
+ "Record with unstable elements" should "error" in {
+ class MyRecord extends Record {
+ def elements = SeqMap("a" -> UInt(8.W))
+ override def cloneType: this.type = (new MyRecord).asInstanceOf[this.type]
+ }
+ val e = the[ChiselException] thrownBy {
+ ChiselStage.elaborate(new Module {
+ val io = IO(Input(new MyRecord))
+ })
+ }
+ e.getMessage should include("does not return the same objects when calling .elements multiple times")
+ }
}