[DNM] Attempt to make FEP selection at compile time #13425
+697
−88
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.
Purpose
This attempts to make FEP selection at compile time. Currently, given multiple FEPs belonging to a function group, we are simply choosing the first one, which can be the wrong one. In our current tests, there are some cases where the first one is the wrong FEP that is chosen but at runtime, it sorts itself out in the call to
ComputeFeps
where the correct one is resolved before the final call. However, I believe there can be cases (not encountered in tests so far) where the first FEP chosen at compile time is completely erroneous (static <=> instance) or has the wrong number of parameters. I will add a TODO to try adding a failing test for this case. Further, in the case of a non-replicated call, it is absolutely essential that we pick the correct FEP at compile time as we cannot fall back on runtime FEP selection in this case.This PR attempts to introduce a compile-time FEP selection function but it turns out to be inadequate as it doesn't consider all cases, such as arguments and parameters differing in ranks, and ranking candidate FEPs in order of how close they match with the arguments, it just chooses the first matching one (based on argument number and checking if args can be coerced into param types). I then attempted to use at compile-time the same FEP selection logic in
SelectFinalFep
that is called at run time. Note that runtime FEP selection cannot be replaced entirely as it requires runtime values for the most accurate results obviously.TODO:
Declarations
Check these if you believe they are true
*.resx
filesRelease Notes
(FILL ME IN) Brief description of the fix / enhancement. Mandatory section
Reviewers
(FILL ME IN) Reviewer 1 (If possible, assign the Reviewer for the PR)
(FILL ME IN, optional) Any additional notes to reviewers or testers.
FYIs
(FILL ME IN, Optional) Names of anyone else you wish to be notified of