Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix Coverity INVALIDATE_ITERATOR defects. #2584

Open
wants to merge 2 commits into
base: main
Choose a base branch
from

Conversation

isaacault
Copy link
Contributor

No description provided.

@isaacault isaacault requested a review from a team as a code owner January 20, 2025 03:51
@github-actions github-actions bot added the common Changes or additions to common utilities label Jan 20, 2025
if (auto iter = map.find(getKey(key)); iter != map.end()) {
iter->second.ref_count++;
} else {
__builtin_unreachable();
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

there's a function:

[[noreturn]] inline void unreachable() {

if (auto iter = map.find(getKey(key)); iter != map.end()) {
iter->second.ref_count++;
} else {
__builtin_unreachable();
Copy link
Contributor

@RossBrunton RossBrunton Jan 20, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not sure removing the assert (what this is functionally equivalent to) is the correct resolution here - it's possible for an error in UR code to retain an error value, and I think flagging that issue in a debug build is useful. I don't think this also resolves the Coverity error either.

If we do want to improve the error checking and have it work in release mode, I think calling abort() with an error message is the best move.

Edit: To explain why it is equivalent, consider that __builtin_unreachable has undefined behaviour. Since undefined behaviour must Never Happen, the compiler may reason that the true branch of the conditional is always taken, and replace it with just auto iter = map.find(getKey(key)); iter->second.ref_count++.

@isaacault isaacault force-pushed the INVALIDATE_ITERATOR branch from 8e5f8d0 to 9c4696f Compare January 21, 2025 01:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
common Changes or additions to common utilities
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants