Skip to content
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

mir-interpret: add method to read wide strings from Memory #69326

Merged
merged 1 commit into from Mar 9, 2020

Conversation

@JOE1994
Copy link
Contributor

JOE1994 commented Feb 20, 2020

Implemented step2 from instructions laid out in rust-lang/miri#707.

Added 2 new methods to struct rustc_mir::interpret::InterpCx.

  • read_os_str_from_wide_str (src/librustc_mir/interpret/operand.rs)
  • write_os_str_to_wide_str (src/librustc_mir/interpret/place.rs)

These methods are intended to be used for environment variable emulation in Windows.

@rust-highfive

This comment has been minimized.

Copy link
Collaborator

rust-highfive commented Feb 20, 2020

r? @ecstatic-morse

(rust_highfive has picked a reviewer for you, use r? to override)

@JOE1994

This comment has been minimized.

Copy link
Contributor Author

JOE1994 commented Feb 20, 2020

@rust-highfive

This comment was marked as resolved.

Copy link
Collaborator

rust-highfive commented Feb 20, 2020

The job x86_64-gnu-llvm-7 of your PR failed (pretty log, raw log). Through arcane magic we have determined that the following fragments from the build log may contain information about the problem.

Click to expand the log.
2020-02-20T20:12:31.4419574Z ========================== Starting Command Output ===========================
2020-02-20T20:12:31.4424156Z [command]/bin/bash --noprofile --norc /home/vsts/work/_temp/b823da70-5739-4655-aa3c-d3c8040518c7.sh
2020-02-20T20:12:31.4424471Z 
2020-02-20T20:12:31.4434435Z ##[section]Finishing: Disable git automatic line ending conversion
2020-02-20T20:12:31.4479988Z ##[section]Starting: Checkout rust-lang/rust@refs/pull/69326/merge to s
2020-02-20T20:12:31.4485450Z Task         : Get sources
2020-02-20T20:12:31.4485761Z Description  : Get sources from a repository. Supports Git, TfsVC, and SVN repositories.
2020-02-20T20:12:31.4486065Z Version      : 1.0.0
2020-02-20T20:12:31.4486292Z Author       : Microsoft
---
2020-02-20T20:12:32.4537629Z ##[command]git remote add origin https://github.com/rust-lang/rust
2020-02-20T20:12:32.4545400Z ##[command]git config gc.auto 0
2020-02-20T20:12:32.4552936Z ##[command]git config --get-all http.https://github.com/rust-lang/rust.extraheader
2020-02-20T20:12:32.4559422Z ##[command]git config --get-all http.proxy
2020-02-20T20:12:32.4571125Z ##[command]git -c http.extraheader="AUTHORIZATION: basic ***" fetch --force --tags --prune --progress --no-recurse-submodules --depth=2 origin +refs/heads/*:refs/remotes/origin/* +refs/pull/69326/merge:refs/remotes/pull/69326/merge

I'm a bot! I can only do what humans tell me to, so if this was not helpful or you have suggestions for improvements, please ping or otherwise contact @TimNN. (Feature Requests)

@JOE1994

This comment has been minimized.

Copy link
Contributor Author

JOE1994 commented Feb 20, 2020

I have some implementation questions..

  1. Current return type of read_os_str_from_wide_str is InterpResult<'tcx, std::ffi::OsString>. Is that okay as it is? Or should it instead be InterpResult<'tcx, &std::ffi::OsStr> (similar to the method read_str which returns InterpResult<'tcx, &str>)

  2. write_os_str_to_wide_str inserts a NULL terminator to the string to be stored. Currently, read_os_str_from_wide_str doesn't use a NULL terminator to check the length(or termination) of a string. In this case, inserting a NULL terminator, is only being done to mimic behavior of what would be done in Windows. I haven't yet written the NULL terminator discarding logic in read_os_str_from_wide_str.
    I'm not sure whether I should

    • Add NULL terminator discarding logic in read_os_str_from_wide_str.
      OR
    • Remove NULL terminator inserting logic in write_os_str_to_wide_str.

Thank you for reading 👍

@lzutao

This comment has been minimized.

Copy link
Contributor

lzutao commented Feb 21, 2020

If the conversion is for Windows only, consider https://doc.rust-lang.org/nightly/std/ffi/index.html#on-windows

@RalfJung

This comment has been minimized.

Copy link
Member

RalfJung commented Feb 22, 2020

read_os_str_from_wide_str doesn't use a NULL terminator to check the length(or termination) of a string

That is pretty odd, and why should that work? The users of these APIs have no idea how long the string is going to be.

You used mplace.len(), that makes little sense as it assumes that this is a slice or array. But the case where you need this method is when you got a raw ptr to some memory, and you have no idea how long the string is. That is all you got in the Windows APIs you want to implement: you have a place containing the pointer, which you read to get the pointer, and then you have to work with that. You don't get a place containing the string.

Current return type of read_os_str_from_wide_str is InterpResult<'tcx, std::ffi::OsString>. Is that okay as it is? Or should it instead be InterpResult<'tcx, &std::ffi::OsStr>

There should be nothing about OsStr or OsString on the rustc side, only Miri needs this. On the Miri side, InterpResult<'tcx, std::ffi::OsString> seems like a reasonable return type for read_os_str_from_wide_str. We cannot do &OsStr because we cannot directly use the underlying storage; that is okay.

For in this PR, you only need to add on the rustc side whatever primitives are needed to implement read_os_str_from_wide_str and write_os_str_to_wide_str in Miri. And I think the only primitive you need is Memory::read_wide_c_str, which should be like Memory:read_c_str except that it returns a Vec<u16>. That should use read_scalar to repeatedly read u16 until it finds a NULL, and push everything into a Vec, and return that. (We can't take a shortcut here and directly access the underlying bytes rhe way read_c_str does because we have to care about endianess.)

All that business about actually interpreting this sequence of u16 should be left to Miri.

@rust-highfive

This comment was marked as resolved.

Copy link
Collaborator

rust-highfive commented Mar 3, 2020

The job mingw-check of your PR failed (pretty log, raw log). Through arcane magic we have determined that the following fragments from the build log may contain information about the problem.

Click to expand the log.
2020-03-03T18:13:24.4092011Z ========================== Starting Command Output ===========================
2020-03-03T18:13:24.4097691Z [command]/bin/bash --noprofile --norc /home/vsts/work/_temp/547a81e6-5307-4201-85ee-f30e5020a9dd.sh
2020-03-03T18:13:24.4098006Z 
2020-03-03T18:13:24.4104884Z ##[section]Finishing: Disable git automatic line ending conversion
2020-03-03T18:13:24.4130124Z ##[section]Starting: Checkout rust-lang/rust@refs/pull/69326/merge to s
2020-03-03T18:13:24.4137337Z Task         : Get sources
2020-03-03T18:13:24.4137707Z Description  : Get sources from a repository. Supports Git, TfsVC, and SVN repositories.
2020-03-03T18:13:24.4138049Z Version      : 1.0.0
2020-03-03T18:13:24.4138278Z Author       : Microsoft
---
2020-03-03T18:13:25.4067000Z ##[command]git remote add origin https://github.com/rust-lang/rust
2020-03-03T18:13:25.4072712Z ##[command]git config gc.auto 0
2020-03-03T18:13:25.4080396Z ##[command]git config --get-all http.https://github.com/rust-lang/rust.extraheader
2020-03-03T18:13:25.4085662Z ##[command]git config --get-all http.proxy
2020-03-03T18:13:25.4092603Z ##[command]git -c http.extraheader="AUTHORIZATION: basic ***" fetch --force --tags --prune --progress --no-recurse-submodules --depth=2 origin +refs/heads/*:refs/remotes/origin/* +refs/pull/69326/merge:refs/remotes/pull/69326/merge
---
2020-03-03T18:22:09.7400469Z     Checking rustc_traits v0.0.0 (/checkout/src/librustc_traits)
2020-03-03T18:22:10.3366843Z     Checking rustc_ty v0.0.0 (/checkout/src/librustc_ty)
2020-03-03T18:22:10.7176810Z     Checking rustc_mir v0.0.0 (/checkout/src/librustc_mir)
2020-03-03T18:22:12.0259539Z     Checking rustc_passes v0.0.0 (/checkout/src/librustc_passes)
2020-03-03T18:22:16.0161840Z error[E0277]: the trait bound `&interpret::memory::Memory<'mir, 'tcx, M>: rustc_target::abi::HasDataLayout` is not satisfied
2020-03-03T18:22:16.0162799Z    --> src/librustc_mir/interpret/memory.rs:812:28
2020-03-03T18:22:16.0163358Z     |
2020-03-03T18:22:16.0164111Z 812 |                 allocation.read_scalar(&self, ptr, self.data_layout().pointer_size)?.to_u16()?;
2020-03-03T18:22:16.0165437Z     |                            ^^^^^^^^^^^ the trait `rustc_target::abi::HasDataLayout` is not implemented for `&interpret::memory::Memory<'mir, 'tcx, M>`
2020-03-03T18:22:16.0167015Z     = help: the following implementations were found:
2020-03-03T18:22:16.0167015Z     = help: the following implementations were found:
2020-03-03T18:22:16.0167846Z               <interpret::memory::Memory<'mir, 'tcx, M> as rustc_target::abi::HasDataLayout>
2020-03-03T18:22:16.0168164Z 
2020-03-03T18:22:16.0330161Z error[E0277]: the trait bound `&interpret::memory::Memory<'mir, 'tcx, M>: rustc_target::abi::HasDataLayout` is not satisfied
2020-03-03T18:22:16.0331151Z    --> src/librustc_mir/interpret/memory.rs:815:51
2020-03-03T18:22:16.0331867Z     |
2020-03-03T18:22:16.0332644Z 815 |                 ptr = ptr.offset(Size { raw: 2 }, &self);
2020-03-03T18:22:16.0333551Z     |                                                   -^^^^
2020-03-03T18:22:16.0334375Z     |                                                   |
2020-03-03T18:22:16.0335571Z     |                                                   the trait `rustc_target::abi::HasDataLayout` is not implemented for `&interpret::memory::Memory<'mir, 'tcx, M>`
2020-03-03T18:22:16.0336814Z     |                                                   help: consider removing 1 leading `&`-references
2020-03-03T18:22:16.0338199Z     = help: the following implementations were found:
2020-03-03T18:22:16.0338199Z     = help: the following implementations were found:
2020-03-03T18:22:16.0338999Z               <interpret::memory::Memory<'mir, 'tcx, M> as rustc_target::abi::HasDataLayout>
2020-03-03T18:22:16.1588316Z error[E0308]: mismatched types
2020-03-03T18:22:16.1589132Z    --> src/librustc_mir/interpret/memory.rs:815:23
2020-03-03T18:22:16.1589964Z     |
2020-03-03T18:22:16.1589964Z     |
2020-03-03T18:22:16.1590709Z 815 |                 ptr = ptr.offset(Size { raw: 2 }, &self);
2020-03-03T18:22:16.1592873Z     |
2020-03-03T18:22:16.1593672Z     = note: expected struct `rustc::mir::interpret::Pointer<_>`
2020-03-03T18:22:16.1594753Z                  found enum `std::result::Result<rustc::mir::interpret::Pointer<_>, rustc::mir::interpret::InterpErrorInfo<'_>>`
2020-03-03T18:22:16.1595256Z 
---
2020-03-03T18:22:18.6523286Z For more information about an error, try `rustc --explain E0277`.
2020-03-03T18:22:18.6711651Z error: could not compile `rustc_mir`.
2020-03-03T18:22:18.6712136Z 
2020-03-03T18:22:18.6712654Z To learn more, run the command again with --verbose.
2020-03-03T18:22:18.6748277Z command did not execute successfully: "/checkout/obj/build/x86_64-unknown-linux-gnu/stage0/bin/cargo" "check" "-Zconfig-profile" "--target" "x86_64-unknown-linux-gnu" "-Zbinary-dep-depinfo" "-j" "2" "--release" "--color" "always" "--features" " llvm" "--manifest-path" "/checkout/src/rustc/Cargo.toml" "--message-format" "json-render-diagnostics"
2020-03-03T18:22:18.6757940Z failed to run: /checkout/obj/build/bootstrap/debug/bootstrap check
2020-03-03T18:22:18.6758295Z Build completed unsuccessfully in 0:05:47
2020-03-03T18:22:18.6807321Z == clock drift check ==
2020-03-03T18:22:18.6816029Z   local time: Tue Mar  3 18:22:18 UTC 2020
2020-03-03T18:22:18.6816029Z   local time: Tue Mar  3 18:22:18 UTC 2020
2020-03-03T18:22:18.9653126Z   network time: Tue, 03 Mar 2020 18:22:18 GMT
2020-03-03T18:22:18.9658476Z == end clock drift check ==
2020-03-03T18:22:19.7769178Z 
2020-03-03T18:22:19.7863255Z ##[error]Bash exited with code '1'.
2020-03-03T18:22:19.7880653Z ##[section]Finishing: Run build
2020-03-03T18:22:19.7936996Z ##[section]Starting: Checkout rust-lang/rust@refs/pull/69326/merge to s
2020-03-03T18:22:19.7943512Z Task         : Get sources
2020-03-03T18:22:19.7943937Z Description  : Get sources from a repository. Supports Git, TfsVC, and SVN repositories.
2020-03-03T18:22:19.7944320Z Version      : 1.0.0
2020-03-03T18:22:19.7944571Z Author       : Microsoft
2020-03-03T18:22:19.7944571Z Author       : Microsoft
2020-03-03T18:22:19.7944993Z Help         : [More Information](https://go.microsoft.com/fwlink/?LinkId=798199)
2020-03-03T18:22:19.7945453Z ==============================================================================
2020-03-03T18:22:20.1219394Z Cleaning any cached credential from repository: rust-lang/rust (GitHub)
2020-03-03T18:22:20.1265716Z ##[section]Finishing: Checkout rust-lang/rust@refs/pull/69326/merge to s
2020-03-03T18:22:20.1354950Z Cleaning up task key
2020-03-03T18:22:20.1356317Z Start cleaning up orphan processes.
2020-03-03T18:22:20.1532815Z Terminate orphan process: pid (3599) (python)
2020-03-03T18:22:20.1682461Z ##[section]Finishing: Finalize Job

I'm a bot! I can only do what humans tell me to, so if this was not helpful or you have suggestions for improvements, please ping or otherwise contact @rust-lang/infra. (Feature Requests)

@JOE1994 JOE1994 changed the title mir-interpret: add methods to read/write wide strings mir-interpret: add methods to read wide strings from Memory Mar 3, 2020
@JOE1994 JOE1994 changed the title mir-interpret: add methods to read wide strings from Memory mir-interpret: add method to read wide strings from Memory Mar 3, 2020
@rust-highfive

This comment was marked as resolved.

Copy link
Collaborator

rust-highfive commented Mar 3, 2020

The job mingw-check of your PR failed (pretty log, raw log). Through arcane magic we have determined that the following fragments from the build log may contain information about the problem.

Click to expand the log.
2020-03-03T18:23:01.8409791Z ========================== Starting Command Output ===========================
2020-03-03T18:23:01.8412290Z [command]/bin/bash --noprofile --norc /home/vsts/work/_temp/b2c9d166-9ac5-4260-afbd-fa6a6153325a.sh
2020-03-03T18:23:01.8412564Z 
2020-03-03T18:23:01.8431414Z ##[section]Finishing: Disable git automatic line ending conversion
2020-03-03T18:23:01.8450052Z ##[section]Starting: Checkout rust-lang/rust@refs/pull/69326/merge to s
2020-03-03T18:23:01.8452855Z Task         : Get sources
2020-03-03T18:23:01.8453105Z Description  : Get sources from a repository. Supports Git, TfsVC, and SVN repositories.
2020-03-03T18:23:01.8453363Z Version      : 1.0.0
2020-03-03T18:23:01.8453529Z Author       : Microsoft
---
2020-03-03T18:23:02.8466006Z ##[command]git remote add origin https://github.com/rust-lang/rust
2020-03-03T18:23:02.8471427Z ##[command]git config gc.auto 0
2020-03-03T18:23:02.8476358Z ##[command]git config --get-all http.https://github.com/rust-lang/rust.extraheader
2020-03-03T18:23:02.8481027Z ##[command]git config --get-all http.proxy
2020-03-03T18:23:02.8488659Z ##[command]git -c http.extraheader="AUTHORIZATION: basic ***" fetch --force --tags --prune --progress --no-recurse-submodules --depth=2 origin +refs/heads/*:refs/remotes/origin/* +refs/pull/69326/merge:refs/remotes/pull/69326/merge
---
2020-03-03T18:31:53.8234732Z     Checking rustc_mir v0.0.0 (/checkout/src/librustc_mir)
2020-03-03T18:31:55.5269484Z     Checking rustc_traits v0.0.0 (/checkout/src/librustc_traits)
2020-03-03T18:31:55.9651383Z     Checking rustc_ty v0.0.0 (/checkout/src/librustc_ty)
2020-03-03T18:31:56.2312345Z     Checking rustc_mir_build v0.0.0 (/checkout/src/librustc_mir_build)
2020-03-03T18:31:57.5697966Z error[E0277]: the trait bound `&interpret::memory::Memory<'mir, 'tcx, M>: rustc_target::abi::HasDataLayout` is not satisfied
2020-03-03T18:31:57.5698654Z    --> src/librustc_mir/interpret/memory.rs:812:28
2020-03-03T18:31:57.5699063Z     |
2020-03-03T18:31:57.5735570Z 812 |                 allocation.read_scalar(&self, ptr, self.data_layout().pointer_size)?.to_u16()?;
2020-03-03T18:31:57.5736859Z     |                            ^^^^^^^^^^^ the trait `rustc_target::abi::HasDataLayout` is not implemented for `&interpret::memory::Memory<'mir, 'tcx, M>`
2020-03-03T18:31:57.5739547Z     = help: the following implementations were found:
2020-03-03T18:31:57.5739547Z     = help: the following implementations were found:
2020-03-03T18:31:57.5740481Z               <interpret::memory::Memory<'mir, 'tcx, M> as rustc_target::abi::HasDataLayout>
2020-03-03T18:31:57.5740747Z 
2020-03-03T18:31:57.5787944Z error[E0277]: the trait bound `&interpret::memory::Memory<'mir, 'tcx, M>: rustc_target::abi::HasDataLayout` is not satisfied
2020-03-03T18:31:57.5788591Z    --> src/librustc_mir/interpret/memory.rs:815:51
2020-03-03T18:31:57.5788985Z     |
2020-03-03T18:31:57.5789482Z 815 |                 ptr = ptr.offset(Size { raw: 2 }, &self);
2020-03-03T18:31:57.5790119Z     |                                                   -^^^^
2020-03-03T18:31:57.5790712Z     |                                                   |
2020-03-03T18:31:57.5791530Z     |                                                   the trait `rustc_target::abi::HasDataLayout` is not implemented for `&interpret::memory::Memory<'mir, 'tcx, M>`
2020-03-03T18:31:57.5792406Z     |                                                   help: consider removing 1 leading `&`-references
2020-03-03T18:31:57.5793370Z     = help: the following implementations were found:
2020-03-03T18:31:57.5793370Z     = help: the following implementations were found:
2020-03-03T18:31:57.5793922Z               <interpret::memory::Memory<'mir, 'tcx, M> as rustc_target::abi::HasDataLayout>
2020-03-03T18:31:57.6543622Z error[E0308]: mismatched types
2020-03-03T18:31:57.6544148Z    --> src/librustc_mir/interpret/memory.rs:815:23
2020-03-03T18:31:57.6544542Z     |
2020-03-03T18:31:57.6544542Z     |
2020-03-03T18:31:57.6545057Z 815 |                 ptr = ptr.offset(Size { raw: 2 }, &self);
2020-03-03T18:31:57.6546554Z     |
2020-03-03T18:31:57.6547046Z     = note: expected struct `rustc::mir::interpret::Pointer<_>`
2020-03-03T18:31:57.6547781Z                  found enum `std::result::Result<rustc::mir::interpret::Pointer<_>, rustc::mir::interpret::InterpErrorInfo<'_>>`
2020-03-03T18:31:57.6548138Z 
---
2020-03-03T18:31:59.4731338Z For more information about an error, try `rustc --explain E0277`.
2020-03-03T18:31:59.4788416Z error: could not compile `rustc_mir`.
2020-03-03T18:31:59.4789050Z warning: build failed, waiting for other jobs to finish...
2020-03-03T18:32:00.4803466Z error: build failed
2020-03-03T18:32:00.4830208Z command did not execute successfully: "/checkout/obj/build/x86_64-unknown-linux-gnu/stage0/bin/cargo" "check" "-Zconfig-profile" "--target" "x86_64-unknown-linux-gnu" "-Zbinary-dep-depinfo" "-j" "2" "--release" "--color" "always" "--features" " llvm" "--manifest-path" "/checkout/src/rustc/Cargo.toml" "--message-format" "json-render-diagnostics"
2020-03-03T18:32:00.4843270Z failed to run: /checkout/obj/build/bootstrap/debug/bootstrap check
2020-03-03T18:32:00.4843703Z Build completed unsuccessfully in 0:04:29
2020-03-03T18:32:00.4886348Z == clock drift check ==
2020-03-03T18:32:00.4906014Z   local time: Tue Mar  3 18:32:00 UTC 2020
2020-03-03T18:32:00.4906014Z   local time: Tue Mar  3 18:32:00 UTC 2020
2020-03-03T18:32:00.7770841Z   network time: Tue, 03 Mar 2020 18:32:00 GMT
2020-03-03T18:32:00.7774599Z == end clock drift check ==
2020-03-03T18:32:01.5299442Z 
2020-03-03T18:32:01.5360708Z ##[error]Bash exited with code '1'.
2020-03-03T18:32:01.5373935Z ##[section]Finishing: Run build
2020-03-03T18:32:01.5416362Z ##[section]Starting: Checkout rust-lang/rust@refs/pull/69326/merge to s
2020-03-03T18:32:01.5421499Z Task         : Get sources
2020-03-03T18:32:01.5422973Z Description  : Get sources from a repository. Supports Git, TfsVC, and SVN repositories.
2020-03-03T18:32:01.5423313Z Version      : 1.0.0
2020-03-03T18:32:01.5423583Z Author       : Microsoft
2020-03-03T18:32:01.5423583Z Author       : Microsoft
2020-03-03T18:32:01.5423924Z Help         : [More Information](https://go.microsoft.com/fwlink/?LinkId=798199)
2020-03-03T18:32:01.5424326Z ==============================================================================
2020-03-03T18:32:01.8032588Z Cleaning any cached credential from repository: rust-lang/rust (GitHub)
2020-03-03T18:32:01.8082268Z ##[section]Finishing: Checkout rust-lang/rust@refs/pull/69326/merge to s
2020-03-03T18:32:01.8167296Z Cleaning up task key
2020-03-03T18:32:01.8168281Z Start cleaning up orphan processes.
2020-03-03T18:32:01.8363042Z Terminate orphan process: pid (4059) (python)
2020-03-03T18:32:01.8389799Z ##[section]Finishing: Finalize Job

I'm a bot! I can only do what humans tell me to, so if this was not helpful or you have suggestions for improvements, please ping or otherwise contact @rust-lang/infra. (Feature Requests)

@JOE1994 JOE1994 changed the title mir-interpret: add method to read wide strings from Memory (WIP) mir-interpret: add method to read wide strings from Memory Mar 3, 2020
@RalfJung

This comment has been minimized.

Copy link
Member

RalfJung commented Mar 4, 2020

Hint: before pushing, always do ./x.py check. That command completes fairly quickly, and it should find errors such as the ones you are hitting now.

@JOE1994 JOE1994 changed the title (WIP) mir-interpret: add method to read wide strings from Memory mir-interpret: add method to read wide strings from Memory Mar 4, 2020
Copy link
Member

RalfJung left a comment

Yeah this looks good. :)

Could you please squash the commits? No need to have 17 commits for this.^^

@JOE1994 JOE1994 force-pushed the JOE1994:os_str_widestring branch from d5738c5 to 05f6482 Mar 7, 2020
@RalfJung

This comment has been minimized.

Copy link
Member

RalfJung commented Mar 8, 2020

Ah I had missed that force-push, GH doesn't send emails for those so in the future please let me know that this is ready for review again. :)

@bors r+ rollup

@bors

This comment has been minimized.

Copy link
Contributor

bors commented Mar 8, 2020

📌 Commit 05f6482 has been approved by RalfJung

@bors

This comment has been minimized.

Copy link
Contributor

bors commented Mar 8, 2020

🌲 The tree is currently closed for pull requests below priority 1000, this pull request will be tested once the tree is reopened

bors added a commit that referenced this pull request Mar 8, 2020
Rollup of 7 pull requests

Successful merges:

 - #69120 (Don't give invalid suggestion on desugared span.)
 - #69326 (mir-interpret: add method to read wide strings from Memory)
 - #69608 (Expose target libdir information via print command)
 - #69734 (Change DIBuilderCreateEnumerator signature to match LLVM 9)
 - #69800 (Compile address sanitizer test with debuginfo)
 - #69807 (Cleanup E0391 explanation)
 - #69820 (clean up E0392 explanation)

Failed merges:

r? @ghost
@bors bors merged commit ff96178 into rust-lang:master Mar 9, 2020
@JOE1994 JOE1994 deleted the JOE1994:os_str_widestring branch Mar 13, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Linked issues

Successfully merging this pull request may close these issues.

None yet

8 participants
You can’t perform that action at this time.