[6.3] AST: Properly disallow isa/cast/dyn_cast on Type
#85561
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.
Explanation:
We currently disallow these by deleting them in the
swiftnamespace. This approach has several loopholes, all of which ultimately work because we happen to define specializations ofsimplify_typeforswift::Type:llvm::isa/cast/dyn_cast. The deleted partial specializations will not be selected because they are not defined in thellvmnamespace.Type. The deleted function templates will not be selected because they all accept aconst Type &, and there is a betterY &Valpartial specialization in LLVM.isa_and_nonullandcast_if_presentare not deleted.Eliminate these loopholes by instead triggering a static assertion failure with a helpful message upon instantiation of
CastInfoforswift::Type.Scope: The only behavioral change here is the replacement of several exact casts that were inadvertently using the aforementioned loopholes with desugaring casts.
Issues: —
Original PRs: AST: Properly disallow isa/cast/dyn_cast on
Type#85487Risk: Low.
Testing:
Reviewers: @hamishknight