Fix checking of function pointer casts involving lvalues. #482
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.
A programmer reported that an indirect function call via a const member resulted in an unexpected compiler error message (Github issue #481). The problem was that the compiler was too restrictive when handling lvalue-to-rvalue casts. The lvalue-to-rvalue casts removes qualifiers on the type. The compiler was checking for the exact type.
I reworked the code for checking a function pointer cast expression. The existing code was hard to follow and there were some bugs in it. The code now has 3 distinct steps:
This includes lvalue-to-rvalue casts and bounds-safe interface casts.
operations involving function pointers. Stop when you reach an expression E
that has checked pointer type or that isn't a value-preserving cast
or cast-like operation.
Testing: