-
Notifications
You must be signed in to change notification settings - Fork 10.5k
Fix an assert in canonicalizeFunctionArgument. #41460
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
Merged
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@swift-ci smoke test |
nate-chandler
approved these changes
Feb 18, 2022
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Great to be doing borrow canonicalizations for all guaranteed function arguments!
837b39f
to
2d1ca32
Compare
Mandatory copy propagation was primarily a stop-gap until lexcial lifetimes were implemented. It supposedly made variables lifetimes more consistent between -O and -Onone builds. Now that lexical lifetimes are enabled, it is no longer needed for that purpose (and will never satisfactorily meet that goal anyway). Mandatory copy propagation may be enabled again later as a -Onone " optimization. But that requires a more careful audit of the effect on debug information. For now, it should be disabled.
Assertion failed: (succeed && "should be filtered by FindBorrowScopeUses"), function canonicalizeFunctionArgument, file CanonicalizeBorrowScope.cpp, line 798 Canonicalization for guaranteed function arguments is triggered by SILCombine without any up-front analysis. Because the canonicalization rewrites the function argument's copies in place, it must always succeed. Fix the visitBorrowScopeUses utility to be aware that it is being invoked on a function argument and avoid bailing out.
2d1ca32
to
4a30118
Compare
Sorry for the delay. This is currently blocked by PR: #41469 |
@swift-ci test |
SwiftREPL/BreakpointSimple.test |
@swift-ci smoke test and merge |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Assertion failed: (succeed && "should be filtered by FindBorrowScopeUses"), function canonicalizeFunctionArgument, file CanonicalizeBorrowScope.cpp, line 798
Canonicalization for guaranteed function arguments is triggered by
SILCombine without any up-front analysis. Because the canonicalization
rewrites the function argument's copies in place, it must always
succeed.
Fix the visitBorrowScopeUses utility to be aware that it is being
invoked on a function argument and avoid bailing out.
To make this problem reproduce reliably, I enabled it in the CopyPropagation pass. This way, the code in question runs over all SIL. Previously, it happened to be invoked during certain SILCombine optimization and could only assert in a rare case involving unmanaged references.