Repository navigation
Conversation
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: 1. Handle casts to checked function pointers that are valid by default. This includes lvalue-to-rvalue casts and bounds-safe interface casts. 2. Otherwise, skip over value-preserving casts and value-preserving 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. 3. Check that E is guaranteed to produce a valid function pointer: - E is a reference to a function name. - E is a null pointer. - E is checked pointer. Testing: - Add additional tests to the Checked C repo for function pointer casts.
This was referenced Jan 15, 2022
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
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.
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: