fix error messages for wrongly typed generic param default values #24006
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.
fixes #21258
When a generic proc is instantiated, if one of the default values doesn't match the type of the parameter,
seminst
sets the default parameter node to annkEmpty
node withtyError
type.sigmatch
checks for this to give an error message if the default param is actually used, but only while actively matching the proc signature, before the proc is even instantiated. The error message also gives very little information.Now, we check for this in
updateDefaultParams
at the end ofsemResolvedCall
, after the proc has been instantiated. ThenkEmpty
node also is given the original mismatching type instead rather thantyError
, only settingtyError
after erroring to prevent cascading errors. The error message is changed to the standard type mismatch error also giving the instantiation info of the routine.