Change helper fn 'write_os_str_to_wide_str'
Helper fn `write_os_str_to_wide_str` now works on `Scalar<Tag>`, just like other **read/write os_str** helper functions.
The 2nd commit contains some changes made to `src/shims/env.rs` in PR #1225, in order to keep it from bloating too much.
helper functions for env_var emulation in Windows
Moving some of the changes submitted in PR #1225, in order to prevent the original PR from bloating too much.
fix conditional compilation condition for os_str <-> bytes conversion
Turns out that condition was wrong and these functions never got compiled... Cc @christianpoveda
give some context in error messages
### Some examples for how different errors look now
Unsupported operation:
```
error: unsupported operation: Miri does not support threading
--> /home/r/.rustup/toolchains/miri/lib/rustlib/src/rust/src/libstd/sys/unix/thread.rs:68:19
|
68 | let ret = libc::pthread_create(&mut native, &attr, thread_start, &*p as *const _ as *mut _);
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Miri does not support threading
|
= help: this is likely not a bug in the program; it indicates that the program performed an operation that the interpreter does not support
```
Unsupported operation that works without isolation:
```
error: unsupported operation: `clock_gettime` not available when isolation is enabled
--> /home/r/.rustup/toolchains/miri/lib/rustlib/src/rust/src/libstd/sys/unix/time.rs:349:22
|
349 | cvt(unsafe { libc::clock_gettime(clock, &mut t.t) }).unwrap();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `clock_gettime` not available when isolation is enabled
|
= help: pass the flag `-Zmiri-disable-isolation` to disable isolation
```
Program abort:
```
error: program stopped: the evaluated program aborted execution
--> /home/r/.rustup/toolchains/miri/lib/rustlib/src/rust/src/libstd/panicking.rs:530:18
|
530 | unsafe { intrinsics::abort() }
| ^^^^^^^^^^^^^^^^^^^ the evaluated program aborted execution
|
```
UB:
```
error: Undefined Behavior: type validation failed: encountered 2, but expected a boolean
--> tests/compile-fail/validity/invalid_bool.rs:2:23
|
2 | let _b = unsafe { std::mem::transmute::<u8, bool>(2) }; //~ ERROR encountered 2, but expected a boolean
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ type validation failed: encountered 2, but expected a boolean
|
= help: this indicates a bug in the program: it performed an invalid operation, and caused Undefined Behavior
```
Experimental UB:
```
error: Undefined Behavior: not granting access to tag <1562> because incompatible item is protected: [Unique for <1567> (call 1189)]
--> tests/compile-fail/stacked_borrows/aliasing_mut1.rs:3:1
|
3 | pub fn safe(_x: &mut i32, _y: &mut i32) {} //~ ERROR protect
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ not granting access to tag <1562> because incompatible item is protected: [Unique for <1567> (call 1189)]
|
= help: this indicates a potential bug in the program: it performed an invalid operation, but the rules it violated are still experimental
```
Fixes https://github.com/rust-lang/miri/issues/417