]> git.lizzy.rs Git - rust.git/commit - src/tools/miri
Rollup merge of #99581 - nnethercote:improve-derive-packed-errors, r=estebank
authorYuki Okushi <jtitor@2k36.org>
Mon, 25 Jul 2022 09:46:51 +0000 (18:46 +0900)
committerGitHub <noreply@github.com>
Mon, 25 Jul 2022 09:46:51 +0000 (18:46 +0900)
commit921cfbe56fbf8a18a72bca22d2cc8748cd10213f
treeecc2b8eab1596befc23fca2cbee27a761da57587
parent65d239222577e52118f0b047a8b31d9dca4b21ed
parent168c5b18392271abe6156350f0952e2b57fff9c5
Rollup merge of #99581 - nnethercote:improve-derive-packed-errors, r=estebank

Improve error messages involving `derive` and `packed`.

There are two errors involving `derive` and `packed`.

```
`#[derive]` can't be derived on a `#[repr(packed)]` struct with type or const parameters
`#[derive]` can't be derived on a `#[repr(packed)]` struct that does not derive Copy
```
The second one overstates things. It is possible to use derive on a
repr(packed) struct that doesn't derive Copy in two cases.
- If all the fields within the struct meet the required alignment: 1 for
  `repr(packed)`, or `N` for `repr(packed(N))`.
- If `Default` is the only trait derived.

This commit improves things in a few ways.
- Changes the errors to say `this trait can't be derived on this ...`.
  This is more accurate, because it's just *this* trait and *this*
  packed struct that are a problem, not *all* derived traits on *all*
  packed structs.
- Adds more details to the "ERROR" lines in the test case, enough to
  distinguish between the two error messages.
- Adds more cases to the test case that don't cause errors, e.g. `Default`
  derives.
- Uses a wider variety of builtin traits in the test case, for better coverage.

r? `@estebank`