Ralf Jung
897a65804d
interpret: change ABI-compat test to be type-based, so the test is consistent across targets
2023-09-09 15:36:44 +02:00
bors
cd71a37f32
Auto merge of #115372 - RalfJung:abi-assert-eq, r=davidtwco
...
add rustc_abi(assert_eq) to test some guaranteed or at least highly expected ABI compatibility guarantees
This new repr(transparent) test is super useful, it would have found https://github.com/rust-lang/rust/issues/115336 and found https://github.com/rust-lang/rust/issues/115404 , https://github.com/rust-lang/rust/issues/115481 , https://github.com/rust-lang/rust/issues/115509 .
2023-09-08 11:56:08 +00:00
Ralf Jung
b0cf4c28ea
turns out Layout has some more things to worry about -- move ABI comparison into helper function
...
like is_bool, and some special magic extra fields
2023-09-08 09:14:07 +02:00
Ralf Jung
c3e14edd8b
accept some differences for rustc_abi(assert_eq), so that we can test more things to be compatible
2023-09-08 08:59:55 +02:00
Ralf Jung
73d8dcb803
miri: catch function calls where the argument is caller-invalid / the return value callee-invalid
2023-09-06 16:36:00 +02:00
Ralf Jung
fa5f13775a
interpret: make MemPlace, Place, Operand types private to the interpreter
2023-09-04 17:53:38 +02:00
Ralf Jung
efc759238d
miri ABI check: fix handling of 1-ZST; don't accept sign differences
2023-08-31 17:27:23 +02:00
Ralf Jung
c37bd09d88
miri function ABI check: specifically look for repr(transparent)
2023-08-30 17:07:25 +02:00
Ralf Jung
1e95aa0c49
interpret: make sure we accept transparent newtypes as ABI-compatible
...
also we were missing the case for Vector arguments, so handle those as well
2023-08-30 17:04:54 +02:00
Ralf Jung
6d1ce9bd13
storage_live: avoid computing the layout unless necessary
2023-08-30 13:46:55 +02:00
Ralf Jung
f87e91de7d
unify passing of sized and unsized function arguments :-)
2023-08-30 13:46:55 +02:00
Ralf Jung
7cdeff266c
a bit of meta-related cleanup on Projectable
2023-08-30 13:46:55 +02:00
Ralf Jung
a09df43d9f
move marking-locals-live out of push_stack_frame, so it happens with argument passing
...
this entirely avoids even creating unsized locals in Immediate::Uninitialized state
2023-08-30 13:46:54 +02:00
Ralf Jung
bdd5855b8e
interpret: fix projecting into an unsized field of a local
...
new invariant: Place::Local never refers to something unsized
2023-08-30 13:43:34 +02:00
Matthias Krüger
23f86255ef
Rollup merge of #115272 - RalfJung:miri-error-print, r=saethlin
...
miri/diagnostics: don't forget to print_backtrace when ICEing on unexpected errors
This should fix the missing output encountered [here](https://github.com/rust-lang/rust/issues/115145#issuecomment-1694334410 ).
r? `@saethlin`
2023-08-30 07:18:11 +02:00
Ralf Jung
b2ebf1c23f
const_eval and codegen: audit uses of is_zst
2023-08-29 09:03:46 +02:00
bors
191dc54dbf
Auto merge of #115182 - RalfJung:abi-compat-sign, r=b-naber
...
miri ABI compatibility check: accept u32 and i32
If only the sign differs, then surely these types are compatible. (We do still check that `arg_ext` is the same, just in case.)
Also I made it so that the ABI check must *imply* that size and alignment are the same, but it doesn't actively check that itself. With how crazy ABI constraints get, having equal size and align really shouldn't be used as a signal for anything I think...
2023-08-28 22:56:10 +00:00
Ralf Jung
beeb2b13cc
miri/diagnostics: don't forget to print_backtrace when ICEing on unexpected errors
...
then also use the new helper in a few other places
2023-08-27 15:42:25 +02:00
bors
296c7a683c
Auto merge of #115184 - saethlin:local-allocated-spans, r=RalfJung
...
Record allocation spans inside force_allocation
This expands https://github.com/rust-lang/miri/pull/2940 to cover locals
r? `@RalfJung`
2023-08-25 17:03:33 +00:00
Ben Kimock
8ecdefb3db
Add a doc comment for the new hook
...
Co-authored-by: Ralf Jung <post@ralfj.de>
2023-08-25 11:58:31 -04:00
Ben Kimock
ec21d584ee
Record allocation spans inside force_allocation
2023-08-25 11:16:52 -04:00
Ralf Jung
5194060ded
miri ABI compatibility check: accept u32 and i32
2023-08-24 21:02:21 +02:00
Ralf Jung
4c53783f3c
when terminating during unwinding, show the reason why
2023-08-24 13:28:26 +02:00
Ralf Jung
ac3bca24b7
interpret: have assert_* intrinsics call the panic machinery instead of a direct abort
2023-08-20 15:52:40 +02:00
Ralf Jung
788fd44a3b
interpret/miri: call panic_cannot_unwind lang item instead of hard-coding the same message
2023-08-20 15:52:40 +02:00
Ralf Jung
818ec8e23a
give some unwind-related terminators a more clear name
2023-08-20 15:52:38 +02:00
Matthias Krüger
5c5ae6c5f3
Rollup merge of #114615 - RalfJung:interpret-invalid-where, r=lcnr
...
interpret: remove incomplete protection against invalid where clauses
Cc https://github.com/rust-lang/rust/issues/97477 , https://github.com/rust-lang/project-const-generics/issues/37
r? ``@lcnr``
2023-08-08 21:44:45 +02:00
Ralf Jung
a7132bf387
interpret: remove incomplete protection against invalid where clauses
2023-08-08 10:35:22 +02:00
bors
6d55184d05
Auto merge of #114520 - RalfJung:unsized-valtrees, r=oli-obk
...
simplify handling of valtrees for unsized types
2023-08-08 07:48:01 +00:00
Matthias Krüger
cbe2522652
Rollup merge of #114382 - scottmcm:compare-bytes-intrinsic, r=cjgillot
...
Add a new `compare_bytes` intrinsic instead of calling `memcmp` directly
As discussed in #113435 , this lets the backends be the place that can have the "don't call the function if n == 0" logic, if it's needed for the target. (I didn't actually *add* those checks, though, since as I understood it we didn't actually need them on known targets?)
Doing this also let me make it `const` (unstable), which I don't think `extern "C" fn memcmp` can be.
cc `@RalfJung` `@Amanieu`
2023-08-07 05:29:12 +02:00
Scott McMurray
502af03445
Add a new compare_bytes
intrinsic instead of calling memcmp
directly
2023-08-06 15:47:40 -07:00
Matthias Krüger
74dce18639
Rollup merge of #114542 - RalfJung:const-prop-nonsense, r=compiler-errors
...
interpret: use ConstPropNonsense for more const-prop induced issues
2023-08-07 00:06:06 +02:00
Ralf Jung
997ec63fb1
simplify handling of valtrees for unsized types
2023-08-06 21:25:49 +02:00
Matthias Krüger
13de583583
Rollup merge of #114505 - ouz-a:cleanup_mir, r=RalfJung
...
Add documentation to has_deref
Documentation of `has_deref` needed some polish to be more clear about where it should be used and what's it's purpose.
cc https://github.com/rust-lang/rust/issues/114401
r? `@RalfJung`
2023-08-06 17:26:29 +02:00
ouz-a
6df546281b
cleanup misinformation regarding has_deref
2023-08-06 17:29:09 +03:00
Ralf Jung
efd54ccf5a
interpret: use ConstPropNonsense for more const-prop induced issues
2023-08-06 15:20:03 +02:00
Ralf Jung
3345077b42
interpret: add mplace_to_ref helper method
2023-08-04 15:00:57 +02:00
Matthias Krüger
00dcc7b97c
Rollup merge of #114372 - RalfJung:const-pointer-as-int, r=oli-obk
...
const validation: point at where we found a pointer but expected an integer
Instead of validation just printing "unable to turn pointer into bytes", make this a regular validation error that says where in the value the bad pointer was found. Also distinguish "expected integer, got pointer" from "expected pointer, got partial pointer or mix of pointers".
To avoid duplicating things too much I refactored the diagnostics for validity a bit, so that "got uninit, expected X" and "got pointer, expected X" can share the "X" part. Also all the errors emitted for validation are now grouped under `const_eval_validation` so that they are in a single group in the ftl file.
r? `@oli-obk`
2023-08-03 17:29:08 +02:00
Matthias Krüger
01fdb9d148
Rollup merge of #114363 - RalfJung:interpret-not-miri, r=jackh726
...
avoid 'miri' when refering to the shared interpreter
This is basically the rustc source code version of https://github.com/rust-lang/rustc-dev-guide/pull/1471 .
2023-08-03 08:12:39 +02:00
Ralf Jung
7767cbb3b0
const validation: point at where we found a pointer but expected an integer
2023-08-02 18:51:50 +02:00
Ralf Jung
2984670cea
avoid 'miri' when refering to the shared interpreter
2023-08-02 16:52:03 +02:00
bors
64ad036307
Auto merge of #114333 - RalfJung:dangling-ptr-offset, r=oli-obk
...
Miri: fix error on dangling pointer inbounds offset
We used to claim that the pointer was "dereferenced", but that is just not true.
Can be reviewed commit-by-commit. The first commit is an unrelated rename that didn't seem worth splitting into its own PR.
r? `@oli-obk`
2023-08-02 09:12:32 +00:00
Ralf Jung
8496292dda
properly track why we checked whether a pointer is in-bounds
...
also simplify the in-bounds checking in Miri's borrow trackers
2023-08-01 17:57:13 +02:00
Ralf Jung
7d5886504c
rename deref_operand → deref_pointer and some Miri helper functions
2023-08-01 13:40:29 +02:00
Ralf Jung
b169ee7c1a
fix alignment handling for Repeat expressions
2023-07-31 19:22:14 +02:00
Deadbeef
e6b423aebb
Remove constness
from ParamEnv
2023-07-27 15:50:42 +00:00
Matthias Krüger
fa21a8c6f8
Rollup merge of #114075 - matthiaskrgr:fmt_args_rustc_3, r=wesleywiser
...
inline format!() args from rustc_codegen_llvm to the end (4)
r? `@WaffleLapkin`
2023-07-27 06:04:13 +02:00
Matthias Krüger
c64ef5e070
inline format!() args from rustc_codegen_llvm to the end (4)
...
r? @WaffleLapkin
2023-07-25 23:20:28 +02:00
Ralf Jung
da3f0d0eb7
make MPlaceTy non-Copy
2023-07-25 22:35:07 +02:00
Ralf Jung
77ff1b83cd
interpret: make read functions generic over operand type
2023-07-25 22:33:59 +02:00