rustbot · GitHub

Merged

Merged

Conversation

@CommanderStorm

Copy link Copy Markdown

Contributor

Fix #17453

changelog: [multiple_unsafe_ops_per_block]: Fix false positive in taking an pointer to an mutable static, but not read/wrtiting it and not field projecting into it

Since I already looked into the other multiple_unsafe_ops_per_block issue, I thought it best to tackle this issue as well. It is a bit more complex because of how fields and paths interact, so a custom visiotor seemed appropriate to keep the code readable.

I also think I covered everything with tests as far as I can, so should be an easy review.

@rustbot

Copy link Copy Markdown

Collaborator

Thanks for the pull request, and welcome!

You should hear from one of our reviewers after this PR gets at least 2 reviews from the community.

Please see the contribution instructions for more information. Namely, in order to ensure the minimum review times lag, PR authors and assigned reviewers should ensure that the review label (S-waiting-on-review and S-waiting-on-author) stays updated, invoking these commands when appropriate:

  • @rustbot author: the review is finished, PR author should check the comments and take action accordingly
  • @rustbot review: the author is ready for a review, this PR will be queued again in the reviewer's queue

@CommanderStorm

… ptr's

@CommanderStorm

shulaoda

Gri-ffin

unsafe {
//~^ multiple_unsafe_ops_per_block
not_very_safe();
let _ = &raw mut GLOBAL_STRUCT.s.x;

Copy link Copy Markdown

Contributor

Choose a reason for hiding this comment

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

Why is GLOBAL_STRUCT.s.x treated differently from value.s.x here, or from the direct &raw mut GLOBAL_INT case? &raw mut GLOBAL_STRUCT.s.x seem to only take the raw address of a field under &raw, without reading/writing the static or creating a reference.

View changes since the review

Copy link Copy Markdown

Contributor Author

Choose a reason for hiding this comment

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

Yes, the rules around this are super confusing and a bit self-inconsistent.
I know and should have called this out a bit better.

The following PR made DIRECT references save.
It did not make field projections save though, so if you field project this is still unsafe.

So essentially, this is codifying a gap in the compiler, but one which is a bit niche.
I did not find a newer issue tracking this, so I might be wrong on what is and what is not.

Copy link Copy Markdown

Contributor Author

Choose a reason for hiding this comment

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

Copy link Copy Markdown

Contributor Author

Choose a reason for hiding this comment

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

Confirmed on zulip...
Not ideal, but that is the state we are in.

@CommanderStorm

samueltardieu

@rustbot

Copy link Copy Markdown

Collaborator

r? @Jarcho

rustbot has assigned @Jarcho for the project review.
They will have a look at your PR within the next two weeks and either review your PR or reassign to another reviewer.

Use r? to explicitly pick a reviewer

Why was this reviewer chosen?

The reviewer was selected based on:

  • Owners of files modified in this PR: 8 candidates
  • 8 candidates expanded to 8 candidates
  • Random selection from Jarcho, Manishearth, dswij, llogiq

@samueltardieu samueltardieu changed the title fix(multiple_unsafe_ops_per_block): false positive in with taking an refrence to an static, but not read/wrtiting it fix(multiple_unsafe_ops_per_block): false positive in with taking an reference to a static, but not reading/writing it

Jul 27, 2026

@samueltardieu

Copy link Copy Markdown

Member

Ping @Urgau: why the double assignment? Since I added the second required approval, shouldn't I be the sole assignee?

@samueltardieu

@CommanderStorm

Copy link Copy Markdown

Contributor Author

Thanks for the quick reviews ^^

Open

@Urgau

Copy link Copy Markdown

Member

Ping @Urgau: why the double assignment? Since I added the second required approval, shouldn't I be the sole assignee?

Yeah, you should have been the sole assignee. I think it's because of a race condition between removing the label and assigning you.

@Urgau Urgau mentioned this pull request

Jul 29, 2026

Merged

@CommanderStorm

Labels

None yet

Read the original on github.com ↗