1
Fork 0
Commit graph

66 commits

Author SHA1 Message Date
bors
06b72b06a2 Auto merge of #101154 - RalfJung:validation-perf, r=oli-obk
interpret: fix unnecessary allocation in validation visitor

Should fix the perf regression introduced by https://github.com/rust-lang/rust/pull/100043.

r? `@oli-obk`
2022-09-03 09:20:54 +00:00
Dylan DPC
81f3841cfb
Rollup merge of #101101 - RalfJung:read-pointer-as-bytes, r=oli-obk
interpret: make read-pointer-as-bytes a CTFE-only error with extra information

Next step in the reaction to https://github.com/rust-lang/rust/issues/99923. Also teaches Miri to implicitly strip provenance in more situations when transmuting pointers to integers, which fixes https://github.com/rust-lang/miri/issues/2456.

Pointer-to-int transmutation during CTFE now produces a message like this:
```
   = help: this code performed an operation that depends on the underlying bytes representing a pointer
   = help: the absolute address of a pointer is not known at compile-time, so such operations are not supported
```

r? ``@oli-obk``
2022-08-30 11:26:51 +05:30
Ralf Jung
8b53abd602 interpret: fix unnecessary allocation in validation visitor 2022-08-29 08:05:20 -04:00
Matthias Krüger
d814fdd3f9
Rollup merge of #100897 - RalfJung:const-not-to-mutable, r=lcnr
extra sanity check against consts pointing to mutable memory

This should be both unreachable and redundant (since we already ensure that validation only reads from read-only memory, when validating consts), but I feel like we cannot be paranoid enough here, and also if this ever fails it'll be a nicer error than the "cannot read from mutable memory" error.
2022-08-29 06:34:46 +02:00
Ralf Jung
1a1220c5e4 validation should only catch UB errors 2022-08-28 11:49:32 -04:00
Ralf Jung
2e172473da interpret: make read-pointer-as-bytes *always* work in Miri
and show some extra information when it happens in CTFE
2022-08-27 18:37:44 -04:00
Ralf Jung
30fa931f92 make read_immediate error immediately on uninit, so ImmTy can carry initialized Scalar 2022-08-26 13:20:57 -04:00
Ralf Jung
2e52fe01cf remove some now-unnecessary parameters from check_bytes 2022-08-26 13:20:56 -04:00
Ralf Jung
da13935ecc remove enforce_number_init machine hook that Miri no longer needs 2022-08-26 13:20:56 -04:00
Ralf Jung
cb4cd73664 extra sanity check against consts pointing to mutable memory 2022-08-23 08:12:37 -04:00
Ralf Jung
be6bb56ee0 add -Zextra-const-ub-checks to enable more UB checking in const-eval 2022-08-07 09:54:40 -04:00
Cameron Steffen
cf2433a74f Use LocalDefId for closures more 2022-07-30 15:59:17 -05: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
3dad266f40 consistently use VTable over Vtable (matching stable stdlib API RawWakerVTable) 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
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
Ralf Jung
6c6cccdd9b interpret/validity: improve some comments 2022-07-14 19:19:15 -04:00
Dylan DPC
1e7d04b23b
Rollup merge of #99011 - oli-obk:UnsoundCell, r=eddyb
`UnsafeCell` blocks niches inside its nested type from being available outside

fixes #87341

This implements the plan by `@eddyb` in https://github.com/rust-lang/rust/issues/87341#issuecomment-886083646

Somewhat related PR (not strictly necessary, but that cleanup made this PR simpler): #94527
2022-07-13 19:32:34 +05:30
Ralf Jung
ab225ade1e interpret: refactor projection handling code
Moves our projection handling code into a common file, and avoids the use of a
general mplace-based fallback function by have more specialized implementations.

mplace_index (and the other slice-related functions) could be more efficient by
copy-pasting the body of operand_index. Or we could do some trait magic to share
the code between them. But for now this is probably fine.
2022-07-11 22:50:46 -04:00
Oli Scherer
2a899dc1cf UnsafeCell now has no niches, ever. 2022-07-07 10:46:22 +00:00
Ralf Jung
27b7b3dcd6 interpret: use AllocRange in UninitByteAccess
also use nice new format string syntax in interpret/error.rs
2022-07-06 10:55:06 -04:00
Ralf Jung
d7edf66a5a move Box mess handling into general visitor 2022-07-03 22:55:25 -04:00
Ralf Jung
7fc77806d4 fix interpreter validity check on Box 2022-07-03 22:42:50 -04:00
Cameron Steffen
ec82bc1996 Factor out hir::Node::Binding 2022-07-01 10:04:19 -05:00
DrMeepster
9039265c30 fix silly mistake
you should always run x.py check before pushing
2022-06-28 13:48:13 -07:00
DrMeepster
9f9c311718 Validate all fields of box instead of validating allocator specifically 2022-06-28 02:19:52 -07:00
DrMeepster
d317988505 validate box's allocator 2022-06-26 18:54:03 -07:00
DrMeepster
6e32a16520 fix box with custom allocator in miri 2022-06-26 13:58:37 -07:00
Ralf Jung
67ec96955f validating the vtable can lead to Stacked Borrows errors 2022-06-05 12:27:08 -04:00
Ralf Jung
4bb152c4bc fmt 2022-05-19 20:34:37 +02:00
Ralf Jung
5514b1176f interpret/validity: separately control checking numbers for being init and non-ptr 2022-05-19 20:16:25 +02:00
Ralf Jung
501f5d09a0 interpret/validity: reject references to uninhabited types 2022-05-17 17:32:36 +02:00
Ralf Jung
719655658a tighten sanity checks around Scalar and ScalarPair 2022-05-10 13:32:20 +02:00
Ralf Jung
e47d6c7a6b give it a scary name 2022-05-05 09:55:38 +02:00
Ralf Jung
5b20da8180 interpret: debug-check ScalarPair layout information 2022-05-04 22:52:02 +02:00
Ralf Jung
54ab357a5b ptr_get_alloc_id: don't return an actual Pointer 2022-04-17 22:27:14 -04:00
Ralf Jung
38004b72bc interpret: err instead of ICE on size mismatches in to_bits_or_ptr_internal 2022-04-07 16:24:48 -04:00
Ralf Jung
d214b38755 interp/validity: enforce Scalar::Initialized 2022-04-05 19:46:51 -04:00
bors
f262ca12aa Auto merge of #94527 - oli-obk:undef_scalars, r=nagisa,erikdesjardin
Let CTFE to handle partially uninitialized unions without marking the entire value as uninitialized.

follow up to #94411

To fix https://github.com/rust-lang/rust/issues/69488 and by extension fix https://github.com/rust-lang/rust/issues/94371, we should stop treating types like `MaybeUninit<usize>` as something that the `Scalar` type in the interpreter engine can represent. So we add a new field to `abi::Primitive` that records whether the primitive is nested in a union

cc `@RalfJung`

r? `@ghost`
2022-04-05 16:46:13 +00:00
Oli Scherer
d32ce37a17 Mark scalar layout unions so that backends that do not support partially initialized scalars can special case them. 2022-04-05 13:18:21 +00:00
Ralf Jung
84a343d1b5 tweak some function names 2022-04-03 15:31:25 -04:00
Ralf Jung
f0ec783bf9 interpret: remove MemoryExtra in favor of giving access to the Machine 2022-04-03 15:28:34 -04:00
Ralf Jung
3bbcf64fb3 interpret: with enforce_number_validity, ensure integers are truly Scalar::Int (i.e., no pointers) 2022-03-26 14:35:36 -04:00
Ralf Jung
8a1f928b8e interpret/validity: improve clarity 2022-03-22 19:03:12 -04:00
Nicholas Nethercote
ca5525d564 Improve AdtDef interning.
This commit makes `AdtDef` use `Interned`. Much the commit is tedious
changes to introduce getter functions. The interesting changes are in
`compiler/rustc_middle/src/ty/adt.rs`.
2022-03-11 13:31:24 +11:00
Ralf Jung
d8064d7d49 Miri fn ptr check: don't use conservative null check 2022-02-24 19:52:54 -05:00
Ralf Jung
182d335870 Miri: relax fn ptr check 2022-02-23 15:11:38 -05:00
Ralf Jung
fb1ee8764f ScalarMaybeUninit is explicitly hexadecimal in its formatting 2022-02-21 21:46:51 -05:00