-
Notifications
You must be signed in to change notification settings - Fork 360
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
Added get_arg to check and transmute opty #4185
base: master
Are you sure you want to change the base?
Conversation
I have made changes only in a single place to make sure that this what we want. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for the PR!
Judging from the CI failures, this does not seem to be quite right. And (as noted inline) I think this will never be able to do the "proper" check. So I don't think this is the right approach.
The right approach has to be somewhat similar to what happens for regular function calls in Miri. Basically, we need a helper function that takes a list of types (the expected argument types) and a return type, and then somehow checks that against the FnAbi
that is passed around in the Miri shim handling. This likely involved constructing our own FnAbi
to compare, and I have no idea how to do that...
Also, I would suggest to not touch intrinsics for now. They are somewhat special ABI-wise. Let's start with normal shims, i.e. all the things on foreign_items
.
@@ -1312,3 +1312,15 @@ pub(crate) fn windows_check_buffer_size((success, len): (bool, u64)) -> u32 { | |||
u32::try_from(len).unwrap() | |||
} | |||
} | |||
|
|||
pub(crate) fn get_arg<'tcx>( | |||
ecx: &mut MiriInterpCx<'tcx>, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Please make this a method on the extension trait instead.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
In the MiriInterpCxExt
trait?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It's the big block that beings with pub trait EvalContextExt<'tcx>: crate::MiriInterpCxExt<'tcx> {
.
if !op.layout.backend_repr.eq_up_to_validity(&ty_layout.backend_repr) { | ||
throw_ub_format!("Invalid argument type: ABI mismatch"); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hm, this is not quite the same logic as what we use to test ABI compatibility. That check cannot really be done on a per-argument / per-type basis; it works on ArgAbi
which is part of FnAbi
.
So, while this gives some extra coverage, it doesn't really go far enough, and we'd have to change everything completely again if we wanted to do the "proper" thing. I am not convinced it is worth investing a lot of effort into a half-way solution.
For non variadic fn's can't we just simply create FnAbi struct using the types available in docs. The issue only comes for variadic fn's as we dont know the types of the extra args. |
Yes we "just" have to do that but it is not necessarily so easy. :) |
Why can't we directly instantiate an object of |
That involves computing a
Yes. It can be invoked in Miri via |
To resolve I was thinking of implementing the following things: Create a fn |
That sounds like a good plan. There are methods defined in https://github.com/rust-lang/rust/blob/master/compiler/rustc_const_eval/src/interpret/call.rs that are probably useful but have to be made |
Are you talking about Also |
Yes.
You can use these methods: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/?search=mk_type_list. |
I am mostly done with the code now I just need |
Okay, please make a PR against the rustc repo to make that function public then. :) |
Links to #3842