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

clarify that references size_of_val can never exceed isize::MAX #1186

Merged
merged 2 commits into from
Jul 11, 2022

Conversation

RalfJung
Copy link
Member

This is the underlying UB that rust-lang/rust#95252 and rust-lang/rust#95295 fix.

I also removed the statement

if the span is empty, "dangling" is the same as "non-null"

since it contradicts what the library docs say about zero-sized accesses/types.

@ehuss
Copy link
Contributor

ehuss commented Jul 11, 2022

I'm a bit unclear about the interaction of ZST and dangling (I'm likely misunderstanding this). Per the std docs:

However, casting any non-zero integer literal to a pointer is valid for zero-sized accesses, even if some memory happens to exist at that address and gets deallocated.

This seems to provide an exception to the dangling rule. That is, something like this?

// This points to some arbitrary location that was not allocated.
let x: *mut () = 1024 as *mut ();
unsafe {
    // This should not be undefined behavior?
    let y = *x;
}

If so, would it make sense to add a similar sentence here? Otherwise, this seems to be in contradiction to the std docs, since this description of "dangling" doesn't carve out this exception.

@RalfJung
Copy link
Member Author

This seems to provide an exception to the dangling rule.

Well, it clarifies what the definition of "dangling" is when the size is 0.

The reference has so far been more vague on this subject, but yeah I can make that more clear here as well. We probably want an entire subsection on the question of "dangling pointers" then, since it is all rather subtle. However, this interacts closely with a bunch of questions around pointer provenance, which we are not (yet) willing to give final answers to...

Copy link
Contributor

@ehuss ehuss left a comment

Choose a reason for hiding this comment

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

Thanks! Given the discussion in rust-lang/rust#95295 (comment) and the std docs and other places, I'm going to go ahead and merge.

@ehuss ehuss merged commit d4d5dfd into rust-lang:master Jul 11, 2022
RalfJung added a commit to RalfJung/rust that referenced this pull request Jul 22, 2022
Update books

## nomicon

1 commits in 70db9e4189f64d1d8e2451b1046111fb356b6dc2..8d1e4dccf71114ff56f328f671f2026d8e6b62a2
2022-06-27 20:47:21 +0900 to 2022-07-18 18:12:35 -0400
- Should be `align_of` instead of `size_of`

## reference

11 commits in 9fce337a55ee4a4629205f6094656195cecad231..a92be0fef439b3d8e0468d82cb24812d303520a0
2022-06-22 13:59:28 -0700 to 2022-07-21 19:01:23 -0700
- Add `IntoFuture::into_future` desugaring (rust-lang/reference#1233)
- Remove uses of the phrase "in Rust" (rust-lang/reference#1241)
- Revert "Add stable references of `macro_metavar_expr`" (rust-lang/reference#1242)
- tweaks
- further tweak addr_of exposition
- edits
- Apply suggestions from code review
- document raw-addr-of operators
- update union field type rules (rust-lang/reference#1238)
- clarify that references size_of_val can never exceed isize::MAX (rust-lang/reference#1186)
- Describe what `windows_subsystem` does (rust-lang/reference#1232)

## book

9 commits in cf2653a5ca553cbbb4a17f1a7db1947820f6a775..36383b4da21dbd0a0781473bc8ad7ef0ed1b6751
2022-07-05 12:07:58 -0400 to 2022-07-19 21:03:20 -0400
- Update ch16-02-message-passing.md
- Update snapshots with edits made to src that need to be checked
- Remove inconsistent newline. Fixes rust-lang/book#3240.
- add missing `b` in chapter 15.6
- Grammar: corrected 'as much' to 'as such'
- grammar: add missing 'of'
- Fix incorrect link for listing 13-06
- Correct method name
- Remove unused theme directories.

## rust-by-example

2 commits in 83724ca387a2a1cd3e8d848f62820020760e358b..3155db49b0d57cd82c65456ac210b69ecec5ccb1
2022-07-05 10:38:07 -0300 to 2022-07-05 20:35:53 -0300
- fix-type (rust-lang/rust-by-example#1565)
- add-examples-to-destructure-tuples (rust-lang/rust-by-example#1566)

## rustc-dev-guide

27 commits in eb83839..d5201cd
2022-07-03 15:17:39 +0900 to 2022-07-21 04:48:49 +0200
- Debuginfo tests now also support revisions.
- Link to rendered book directly
- Fix link to clippy sync docs
- remove stray markup
- renamed
- sync with hackmd version
- replace misleading name (rust-lang/rustc-dev-guide#1401)
- Remove a mention to Steve on r? example
- obey line length limit (part 3)
- obey line length limit (part 2)
- obey line length limit
- sync with hackmd
- add draft chapter
- add mdbook-mermaid
- use relative links
- fix some typos (rust-lang/rustc-dev-guide#1398)
- typo: monomorph docs
- Rename debugging_opts to unstable_opts, use link
- address review comment
- update date reference on MIR inliner
- remove outdated info on debugging
- small fixes to ty chapter (rust-lang/rustc-dev-guide#1390)
- Update the build instructions for the standard library
- overview.md: Link to existing Macro Expansion and Name Resolution docs (rust-lang/rustc-dev-guide#1388)
- Git-ignore `pulls.json` (rust-lang/rustc-dev-guide#1386)
- Revert "Add the config needed to get rust-analyzer working on src/bootstrap (rust-lang/rustc-dev-guide#1381)"
- Use `x.py check` instead of `cargo check` for build scripts (rust-lang/rustc-dev-guide#1384)
@RalfJung RalfJung deleted the size-of-val branch October 31, 2022 10:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants