Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Make isView safe outside of Builder context #4228

Merged
merged 2 commits into from
Jun 28, 2024
Merged

Make isView safe outside of Builder context #4228

merged 2 commits into from
Jun 28, 2024

Conversation

jackkoenig
Copy link
Contributor

Contemplating views in naming (#4222) exposed a longstanding bug that I patched out recently in #4147. Basically isView does not work outside of Builder contexts. Now it is safe.

We do have lots of tests for things like literals outside of Builder contexts, but they didn't trigger this because ViewParent is a lazy val and thus if any Chisel elaboration has occurred on the same thread, then the problem doesn't manifest. Thus this "test" looks very strange, but by virtue of defining a literal assigned to a val first thing in a ScalaTest spec, it ensures no Chisel elaboration has run before when this line executes, and the naming plugin + #4222 ensures that this value is checked if it's a view.

Contributor Checklist

  • Did you add Scaladoc to every public function/method?
  • Did you add at least one test demonstrating the PR?
  • Did you delete any extraneous printlns/debugging code?
  • Did you specify the type of improvement?
  • Did you add appropriate documentation in docs/src?
  • Did you request a desired merge strategy?
  • Did you add text to be included in the Release Notes for this change?

Type of Improvement

  • Bugfix

Desired Merge Strategy

  • Squash

Release Notes

Reviewer Checklist (only modified by reviewer)

  • Did you add the appropriate labels? (Select the most appropriate one based on the "Type of Improvement")
  • Did you mark the proper milestone (Bug fix: 3.6.x, 5.x, or 6.x depending on impact, API modification or big change: 7.0)?
  • Did you review?
  • Did you check whether all relevant Contributor checkboxes have been checked?
  • Did you do one of the following when ready to merge:
    • Squash: You/ the contributor Enable auto-merge (squash), clean up the commit message, and label with Please Merge.
    • Merge: Ensure that contributor has cleaned up their commit history, then merge with Create a merge commit.

@@ -273,7 +273,7 @@ package object dataview {
}

// Safe for all Data
private[chisel3] def isView(d: Data): Boolean = d._parent.contains(ViewParent)
private[chisel3] def isView(d: Data): Boolean = d._parent.exists(_ == ViewParent)
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This looks equivalent but because contains takes its argument by value, even if _parent is None, ViewParent must be initialized (it's a lazy val) which requires a Chisel context (because it's a Module)... yay side effects 🤮.

@jackkoenig jackkoenig added this to the 3.6.x milestone Jun 28, 2024
@jackkoenig jackkoenig added the Bugfix Fixes a bug, will be included in release notes label Jun 28, 2024
@@ -275,6 +275,11 @@ trait ShiftRightWidthBehavior { self: ChiselRunners =>

class UIntOpsSpec extends ChiselPropSpec with Matchers with Utils with ShiftRightWidthBehavior {

// This is intentionally a val outside of any ScalaTest constructs to check that it is legal
// to create a literal outside of a Chisel context and *before* and Chisel contexts have been created
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

And-> any

Copy link
Contributor

@mwachs5 mwachs5 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not sure why the difference matters but looks good!

@jackkoenig jackkoenig enabled auto-merge (squash) June 28, 2024 00:33
@jackkoenig jackkoenig merged commit 219a237 into main Jun 28, 2024
15 checks passed
@jackkoenig jackkoenig deleted the safe-is-view branch June 28, 2024 00:48
@mergify mergify bot added the Backported This PR has been backported label Jun 28, 2024
mergify bot pushed a commit that referenced this pull request Jun 28, 2024
mergify bot pushed a commit that referenced this pull request Jun 28, 2024
mergify bot pushed a commit that referenced this pull request Jun 28, 2024
chiselbot pushed a commit that referenced this pull request Jun 28, 2024
(cherry picked from commit 219a237)

Co-authored-by: Jack Koenig <koenig@sifive.com>
chiselbot pushed a commit that referenced this pull request Jun 28, 2024
(cherry picked from commit 219a237)

Co-authored-by: Jack Koenig <koenig@sifive.com>
chiselbot pushed a commit that referenced this pull request Jun 28, 2024
(cherry picked from commit 219a237)

Co-authored-by: Jack Koenig <koenig@sifive.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Backported This PR has been backported Bugfix Fixes a bug, will be included in release notes
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants