Commit Graph

1488 Commits

Author SHA1 Message Date
Matthias Krüger 0de7f756f0 Rollup merge of #99746 - compiler-errors:more-trait-engine, r=jackh726
Use `TraitEngine` in more places that don't specifically need `FulfillmentContext::new_in_snapshot`

Not sure if this change is worthwhile, but couldn't hurt re: chalkification

r? types
2022-08-03 22:29:27 +02:00
bors d6b96b61e7 Auto merge of #100064 - RalfJung:disaligned, r=petrochenkov
fix is_disaligned logic for nested packed structs

https://github.com/rust-lang/rust/pull/83605 broke the `is_disaligned` logic by bailing out of the loop in `is_within_packed` early. This PR fixes that problem and adds suitable tests.

Fixes https://github.com/rust-lang/rust/issues/99838
2022-08-03 16:09:56 +00:00
Ralf Jung 9097ce9054 fix is_disaligned logic for nested packed structs 2022-08-03 09:59:08 -04:00
Jack Huey 955fcad758 Add bound_impl_subject and bound_return_ty 2022-08-03 01:02:46 -04:00
Camille GILLOT 957548183d Remove trait_of_item query. 2022-08-01 21:39:26 +02:00
Camille GILLOT d7ea161b7e Remove DefId from AssocItemContainer. 2022-08-01 21:38:45 +02:00
Matthias Krüger e6bb00fff5 Rollup merge of #100003 - nnethercote:improve-size-assertions, r=lqd
Improve size assertions.

- For any file with four or more size assertions, move them into a
  separate module (as is already done for `hir.rs`).
- Add some more for AST nodes and THIR nodes.
- Put the `hir.rs` ones in alphabetical order.

r? `@lqd`
2022-08-01 16:49:33 +02:00
Nicholas Nethercote 9037ebba0c Improve size assertions.
- For any file with four or more size assertions, move them into a
  separate module (as is already done for `hir.rs`).
- Add some more for AST nodes and THIR nodes.
- Put the `hir.rs` ones in alphabetical order.
2022-08-01 09:15:05 +10:00
Ralf Jung 5798555812 interpret: only consider 1-ZST when searching for receiver 2022-07-30 21:44:34 -04:00
Cameron Steffen cf2433a74f Use LocalDefId for closures more 2022-07-30 15:59:17 -05:00
Guillaume Gomez 9e7b7d5e1c Rollup merge of #99651 - compiler-errors:fn-and-raw-ptr-in-const-generics, r=oli-obk
Deeply deny fn and raw ptrs in const generics

I think this is right -- just because we wrap a fn ptr in a wrapper type does not mean we should allow it in a const parameter.

We now reject both of these in the same way:

```
#![feature(adt_const_params)]

#[derive(Eq, PartialEq)]
struct Wrapper();

fn foo<const W: Wrapper>() {}

fn foo2<const F: fn()>() {}
```

This does regress one test (`src/test/ui/consts/refs_check_const_eq-issue-88384.stderr`), but I'm not sure it should've passed in the first place.

cc: ``@b-naber`` who introduced that test^
fixes #99641
2022-07-27 17:55:04 +02:00
Deadbeef 4b7a348508 ICE on RawPtrComparison check 2022-07-26 14:57:49 +00:00
Dylan DPC deab13c681 Rollup merge of #99692 - RalfJung:too-far, r=oli-obk
interpret, ptr_offset_from: refactor and test too-far-apart check

We didn't have any tests for the "too far apart" message, and indeed that check mostly relied on the in-bounds check and was otherwise probably not entirely correct... so I rewrote that check, and it is before the in-bounds check so we can test it separately.
2022-07-26 14:26:58 +05:30
Michael Goulet 58f107ab56 Use TraitEngine in more places that don't specifically need FulfillmentCtxt::new_in_snapshot 2022-07-26 04:55:06 +00:00
Yuki Okushi 2973b00ca6 Rollup merge of #99673 - RalfJung:interpret-invalid-dyn, r=oli-obk
don't ICE on invalid dyn calls

Due to https://github.com/rust-lang/rust/issues/50781 this is actually reachable.
Fixes https://github.com/rust-lang/miri/issues/2432

r? ``@oli-obk``
2022-07-26 07:14:49 +09:00
Michael Goulet 10b69ab0d2 Remove non-descriptive boolean from search_for_structural_match_violation 2022-07-25 03:39:23 +00:00
Michael Goulet 1152e70363 Deeply deny fn and raw ptrs in const generics 2022-07-25 03:39:22 +00:00
Ralf Jung 58f2ede15f interpret, ptr_offset_from: refactor and test too-far-apart check 2022-07-24 19:35:40 -04:00
Ralf Jung f80bf1013d don't ICE on invalid dyn calls 2022-07-24 09:21:05 -04:00
Ralf Jung 4e89a7c293 now we can make scalar_to_ptr a method on Scalar 2022-07-23 10:36:57 -04:00
Ralf Jung 665a7e8f56 remove some provenance-related machine hooks that Miri no longer needs 2022-07-23 10:15:37 -04:00
Ralf Jung 19e29e9a57 interpret: fix vtable check debug assertion 2022-07-22 10:37:03 -04:00
Ralf Jung d46dfa25d4 detect bad vptrs on dyn calls 2022-07-20 19:52:10 -04:00
Ralf Jung 9927b3173b detect bad vtables on an upcast 2022-07-20 17:12:08 -04:00
Ralf Jung 3dad266f40 consistently use VTable over Vtable (matching stable stdlib API RawWakerVTable) 2022-07-20 17:12:07 -04:00
Ralf Jung 5e840c5c8c incorporate some review feedback 2022-07-20 17:12:07 -04:00
Ralf Jung 8affef2ccb add intrinsic to access vtable size and align 2022-07-20 17:12:07 -04:00
Ralf Jung fe00573324 make use of symbolic vtables in interpreter 2022-07-20 17:12:04 -04:00
Ralf Jung a10d8e4581 rename get_global_alloc to try_get_global_alloc 2022-07-20 17:09:22 -04:00
Ralf Jung da5e4d73f1 add a Vtable kind of symbolic allocations 2022-07-20 16:57:31 -04:00
bors a7468c60f8 Auto merge of #99472 - RalfJung:provenance, r=oli-obk
interpret: rename Tag/PointerTag to Prov/Provenance

We were pretty inconsistent with calling this the "tag" vs the "provenance" of the pointer; I think we should consistently call it "provenance".

r? `@oli-obk`
2022-07-20 16:56:31 +00:00
Oli Scherer 4a742a691e Revert "Rollup merge of #98582 - oli-obk:unconstrained_opaque_type, r=estebank"
This reverts commit 6f8fb911ad, reversing
changes made to 7210e46dc6.
2022-07-20 07:55:58 +00:00
Ralf Jung 0ec3269db8 interpret: rename Tag/PointerTag to Prov/Provenance
Let's avoid using two different terms for the same thing -- let's just call it "provenance" everywhere.
In Miri, provenance consists of an AllocId and an SbTag (Stacked Borrows tag), which made this even more confusing.
2022-07-19 15:38:32 -04:00
bors 29c5a028b0 Auto merge of #99309 - RalfJung:no-large-copies, r=oli-obk
interpret: make some large types not Copy

Also remove some unused trait impls (mostly HashStable).

This didn't find any unnecessary copies that I managed to avoid, but it might still be better to require explicit clone for these types? Not sure.

r? `@oli-obk`
2022-07-19 16:33:45 +00:00
Ralf Jung 213a25d975 interpret: make some large types not Copy 2022-07-18 13:57:35 -04:00
Ralf Jung 388971b05d interpret: remove some unused trait impls 2022-07-18 13:51:11 -04:00
Dylan DPC a47a090d51 Rollup merge of #99378 - RalfJung:box-early-return, r=oli-obk
interpret/visitor: add missing early return

I forgot to add this when adding the special `Box` handling branch.

r? ```@oli-obk```
2022-07-18 21:14:48 +05:30
bors 263edd43c5 Auto merge of #99033 - 5225225:interpreter-validity-checks, r=oli-obk
Use constant eval to do strict mem::uninit/zeroed validity checks

I'm not sure about the code organisation here, I just dumped the check in rustc_const_eval at the root. Not hard to move it elsewhere, in any case.

Also, this means cranelift codegen intrinsics lose the strict checks, since they don't seem to depend on rustc_const_eval, and I didn't see a point in keeping around two copies.

I also left comments in the is_zero_valid methods about "uhhh help how do i do this", those apply to both methods equally.

Also rustc_codegen_ssa now depends on rustc_const_eval... is this okay?

Pinging `@RalfJung` since you were the one who mentioned this to me, so I'm assuming you're interested.

Haven't had a chance to run full tests on this since it's really warm, and it's 1AM, I'll check out any failures/comments in the morning :)
2022-07-17 19:28:01 +00:00
Ralf Jung e6be52bbbd interpret/visitor: add missing early return 2022-07-17 10:47:34 -04:00
Caio 3266460749 Stabilize let_chains 2022-07-16 20:17:58 -03:00
Matthias Krüger fa298beb79 Rollup merge of #99259 - RalfJung:visit-a-place, r=oli-obk
interpret/visitor: support visiting with a PlaceTy

Finally we can visit a `PlaceTy` in a way that will only do `force_allocation` when needed ti visit a field. :)

r? `@oli-obk`
2022-07-16 22:30:51 +02:00
Ralf Jung c4cb043f06 interpret/visitor: support visiting with a PlaceTy 2022-07-15 11:54:20 -04:00
Oli Scherer 84a444a1f4 Introduce opaque type to hidden type projection 2022-07-15 15:49:22 +00:00
bors 6077b7cda4 Auto merge of #99013 - RalfJung:dont-poison-my-places, r=oli-obk
interpret: get rid of MemPlaceMeta::Poison

This is achieved by refactoring the projection code (`{mplace,place,operand}_{downcast,field,index,...}`) so that we no longer need to call `assert_mem_place` in the operand handling.
2022-07-15 08:57:59 +00:00
Ralf Jung 6c6cccdd9b interpret/validity: improve some comments 2022-07-14 19:19:15 -04:00
5225225 27412d1e3e Use constant eval to do strict validity checks 2022-07-14 22:55:17 +01:00
Ralf Jung e3ef4fdac9 rename MPlaceTy::dangling to fake_alloc_zst 2022-07-14 11:40:47 -04:00
Daniel Bevenius ed73037661 Remove comment referring to constness.rs
This commit removes the comment in emulate_intrinsic, which is
currently referring to 'src/librustc_middle/ty/constness.rs'.
2022-07-14 16:30:48 +02:00
Joshua Nelson 3c9765cff1 Rename debugging_opts to unstable_opts
This is no longer used only for debugging options (e.g. `-Zoutput-width`, `-Zallow-features`).
Rename it to be more clear.
2022-07-13 17:47:06 -05:00
bors c80dde43f9 Auto merge of #99210 - Dylan-DPC:rollup-879cp1t, r=Dylan-DPC
Rollup of 5 pull requests

Successful merges:

 - #98574 (Lower let-else in MIR)
 - #99011 (`UnsafeCell` blocks niches inside its nested type from being available outside)
 - #99030 (diagnostics: error messages when struct literals fail to parse)
 - #99155 (Keep unstable target features for asm feature checking)
 - #99199 (Refactor: remove an unnecessary `span_to_snippet`)

Failed merges:

r? `@ghost`
`@rustbot` modify labels: rollup
2022-07-13 17:13:27 +00:00