Commit Graph

224824 Commits

Author SHA1 Message Date
clubby789
f97fddab91 Ensure Fluent messages are in alphabetical order 2023-05-25 23:49:35 +00:00
bors
a2b1646c59 Auto merge of #86844 - bjorn3:global_alloc_improvements, r=pnkfelix
Support #[global_allocator] without the allocator shim

This makes it possible to use liballoc/libstd in combination with `--emit obj` if you use `#[global_allocator]`. This is what rust-for-linux uses right now and systemd may use in the future. Currently they have to depend on the exact implementation of the allocator shim to create one themself as `--emit obj` doesn't create an allocator shim.

Note that currently the allocator shim also defines the oom error handler, which is normally required too. Once `#![feature(default_alloc_error_handler)]` becomes the only option, this can be avoided. In addition when using only fallible allocator methods and either `--cfg no_global_oom_handling` for liballoc (like rust-for-linux) or `--gc-sections` no references to the oom error handler will exist.

To avoid this feature being insta-stable, you will have to define `__rust_no_alloc_shim_is_unstable` to avoid linker errors.

(Labeling this with both T-compiler and T-lang as it originally involved both an implementation detail and had an insta-stable user facing change. As noted above, the `__rust_no_alloc_shim_is_unstable` symbol requirement should prevent unintended dependence on this unstable feature.)
2023-05-25 16:59:57 +00:00
bors
cade26637f Auto merge of #111512 - petrochenkov:microdoc2, r=GuillaumeGomez
rustdoc: Cleanup doc string collapsing

`doc_value` and (former) `collapsed_doc_value` can be implemented in terms of each other, and `doc_value` doesn't need the `Option`.

This PR doesn't do any semantic changes, only refactoring, although some pre-existing choices between `doc_value` and `collapsed_doc_value` across rustdoc may be questionable.
2023-05-25 14:00:31 +00:00
bors
d300bffa4f Auto merge of #110906 - ekusiadadus:ekusiadadus/fix-bash-complete-etc, r=albertlarsan68
fix: 🐛 etc/bash_complettion -> src/etc/... to avoid copy error

## why

I got an error on executing `./x.py build && ./x.py install`.

Found creating some folder in  `/etc/bash_completion.d/`, It appears to be incorrect to attempt to create a folder in `/etc/bash_completion.d/`, as this proccess requires `sudo`.

Fixes #111653

```
Uplifting rustc (stage1 -> stage3)
Building tool cargo (stage2 -> stage3, x86_64-unknown-linux-gnu)
    Finished release [optimized] target(s) in 0.16s
Building tool cargo-credential-1password (stage2 -> stage3, x86_64-unknown-linux-gnu)
    Finished release [optimized] target(s) in 0.06s
Dist cargo-1.71.0-dev-x86_64-unknown-linux-gnu
        finished in 10.700 seconds
Installing stage2 cargo (x86_64-unknown-linux-gnu)
install: uninstalling component 'cargo'
install: creating uninstall script at /home/ekusiadadus/.rustup/toolchains/dev/lib/rustlib/uninstall.sh
install: installing component 'cargo'
/home/ekusiadadus/dev/rust/rust/build/tmp/tarball/cargo/x86_64-unknown-linux-gnu/cargo-1.71.0-dev-x86_64-unknown-linux-gnu/install.sh: 310: cd: can't cd to /etc/bash_completion.d
cp: cannot create regular file '/cargo': Permission denied
chmod: cannot access '/cargo': No such file or directory
install: error: file creation failed. see logs at '/home/ekusiadadus/.rustup/toolchains/dev/lib/rustlib/install.log'
Build completed unsuccessfully in 0:01:11
```

Error Log

```
install: uninstalling component 'cargo'
install: removing file /home/ekusiadadus/.rustup/toolchains/dev/bin/cargo
$ rm -f /home/ekusiadadus/.rustup/toolchains/dev/bin/cargo
install: removing file /home/ekusiadadus/.rustup/toolchains/dev/libexec/cargo-credential-1password
$ rm -f /home/ekusiadadus/.rustup/toolchains/dev/libexec/cargo-credential-1password
install: removing file /home/ekusiadadus/.rustup/toolchains/dev/share/doc/rust/LICENSE-APACHE
$ rm -f /home/ekusiadadus/.rustup/toolchains/dev/share/doc/rust/LICENSE-APACHE
install: removing file /home/ekusiadadus/.rustup/toolchains/dev/share/doc/rust/LICENSE-MIT
$ rm -f /home/ekusiadadus/.rustup/toolchains/dev/share/doc/rust/LICENSE-MIT
install: removing file /home/ekusiadadus/.rustup/toolchains/dev/share/doc/rust/LICENSE-THIRD-PARTY
$ rm -f /home/ekusiadadus/.rustup/toolchains/dev/share/doc/rust/LICENSE-THIRD-PARTY
install: removing file /home/ekusiadadus/.rustup/toolchains/dev/share/doc/rust/README.md
$ rm -f /home/ekusiadadus/.rustup/toolchains/dev/share/doc/rust/README.md
install: removing file /home/ekusiadadus/.rustup/toolchains/dev/share/man/man1/cargo-add.1
$ rm -f /home/ekusiadadus/.rustup/toolchains/dev/share/man/man1/cargo-add.1
install: removing file /home/ekusiadadus/.rustup/toolchains/dev/share/man/man1/cargo-bench.1
$ rm -f /home/ekusiadadus/.rustup/toolchains/dev/share/man/man1/cargo-bench.1
install: removing file /home/ekusiadadus/.rustup/toolchains/dev/share/man/man1/cargo-build.1
$ rm -f /home/ekusiadadus/.rustup/toolchains/dev/share/man/man1/cargo-build.1
install: removing file /home/ekusiadadus/.rustup/toolchains/dev/share/man/man1/cargo-check.1
$ rm -f /home/ekusiadadus/.rustup/toolchains/dev/share/man/man1/cargo-check.1
install: removing file /home/ekusiadadus/.rustup/toolchains/dev/share/man/man1/cargo-clean.1
$ rm -f /home/ekusiadadus/.rustup/toolchains/dev/share/man/man1/cargo-clean.1
install: removing file /home/ekusiadadus/.rustup/toolchains/dev/share/man/man1/cargo-doc.1
$ rm -f /home/ekusiadadus/.rustup/toolchains/dev/share/man/man1/cargo-doc.1
install: removing file /home/ekusiadadus/.rustup/toolchains/dev/share/man/man1/cargo-fetch.1
$ rm -f /home/ekusiadadus/.rustup/toolchains/dev/share/man/man1/cargo-fetch.1
install: removing file /home/ekusiadadus/.rustup/toolchains/dev/share/man/man1/cargo-fix.1
$ rm -f /home/ekusiadadus/.rustup/toolchains/dev/share/man/man1/cargo-fix.1
install: removing file /home/ekusiadadus/.rustup/toolchains/dev/share/man/man1/cargo-generate-lockfile.1
$ rm -f /home/ekusiadadus/.rustup/toolchains/dev/share/man/man1/cargo-generate-lockfile.1
install: removing file /home/ekusiadadus/.rustup/toolchains/dev/share/man/man1/cargo-help.1
$ rm -f /home/ekusiadadus/.rustup/toolchains/dev/share/man/man1/cargo-help.1
install: removing file /home/ekusiadadus/.rustup/toolchains/dev/share/man/man1/cargo-init.1
$ rm -f /home/ekusiadadus/.rustup/toolchains/dev/share/man/man1/cargo-init.1
install: removing file /home/ekusiadadus/.rustup/toolchains/dev/share/man/man1/cargo-install.1
$ rm -f /home/ekusiadadus/.rustup/toolchains/dev/share/man/man1/cargo-install.1
install: removing file /home/ekusiadadus/.rustup/toolchains/dev/share/man/man1/cargo-locate-project.1
$ rm -f /home/ekusiadadus/.rustup/toolchains/dev/share/man/man1/cargo-locate-project.1
install: removing file /home/ekusiadadus/.rustup/toolchains/dev/share/man/man1/cargo-login.1
$ rm -f /home/ekusiadadus/.rustup/toolchains/dev/share/man/man1/cargo-login.1
install: removing file /home/ekusiadadus/.rustup/toolchains/dev/share/man/man1/cargo-logout.1
$ rm -f /home/ekusiadadus/.rustup/toolchains/dev/share/man/man1/cargo-logout.1
install: removing file /home/ekusiadadus/.rustup/toolchains/dev/share/man/man1/cargo-metadata.1
$ rm -f /home/ekusiadadus/.rustup/toolchains/dev/share/man/man1/cargo-metadata.1
install: removing file /home/ekusiadadus/.rustup/toolchains/dev/share/man/man1/cargo-new.1
$ rm -f /home/ekusiadadus/.rustup/toolchains/dev/share/man/man1/cargo-new.1
install: removing file /home/ekusiadadus/.rustup/toolchains/dev/share/man/man1/cargo-owner.1
$ rm -f /home/ekusiadadus/.rustup/toolchains/dev/share/man/man1/cargo-owner.1
install: removing file /home/ekusiadadus/.rustup/toolchains/dev/share/man/man1/cargo-package.1
$ rm -f /home/ekusiadadus/.rustup/toolchains/dev/share/man/man1/cargo-package.1
install: removing file /home/ekusiadadus/.rustup/toolchains/dev/share/man/man1/cargo-pkgid.1
$ rm -f /home/ekusiadadus/.rustup/toolchains/dev/share/man/man1/cargo-pkgid.1
install: removing file /home/ekusiadadus/.rustup/toolchains/dev/share/man/man1/cargo-publish.1
$ rm -f /home/ekusiadadus/.rustup/toolchains/dev/share/man/man1/cargo-publish.1
install: removing file /home/ekusiadadus/.rustup/toolchains/dev/share/man/man1/cargo-remove.1
$ rm -f /home/ekusiadadus/.rustup/toolchains/dev/share/man/man1/cargo-remove.1
install: removing file /home/ekusiadadus/.rustup/toolchains/dev/share/man/man1/cargo-report.1
$ rm -f /home/ekusiadadus/.rustup/toolchains/dev/share/man/man1/cargo-report.1
install: removing file /home/ekusiadadus/.rustup/toolchains/dev/share/man/man1/cargo-run.1
$ rm -f /home/ekusiadadus/.rustup/toolchains/dev/share/man/man1/cargo-run.1
install: removing file /home/ekusiadadus/.rustup/toolchains/dev/share/man/man1/cargo-rustc.1
$ rm -f /home/ekusiadadus/.rustup/toolchains/dev/share/man/man1/cargo-rustc.1
install: removing file /home/ekusiadadus/.rustup/toolchains/dev/share/man/man1/cargo-rustdoc.1
$ rm -f /home/ekusiadadus/.rustup/toolchains/dev/share/man/man1/cargo-rustdoc.1
install: removing file /home/ekusiadadus/.rustup/toolchains/dev/share/man/man1/cargo-search.1
$ rm -f /home/ekusiadadus/.rustup/toolchains/dev/share/man/man1/cargo-search.1
install: removing file /home/ekusiadadus/.rustup/toolchains/dev/share/man/man1/cargo-test.1
$ rm -f /home/ekusiadadus/.rustup/toolchains/dev/share/man/man1/cargo-test.1
install: removing file /home/ekusiadadus/.rustup/toolchains/dev/share/man/man1/cargo-tree.1
$ rm -f /home/ekusiadadus/.rustup/toolchains/dev/share/man/man1/cargo-tree.1
install: removing file /home/ekusiadadus/.rustup/toolchains/dev/share/man/man1/cargo-uninstall.1
$ rm -f /home/ekusiadadus/.rustup/toolchains/dev/share/man/man1/cargo-uninstall.1
install: removing file /home/ekusiadadus/.rustup/toolchains/dev/share/man/man1/cargo-update.1
$ rm -f /home/ekusiadadus/.rustup/toolchains/dev/share/man/man1/cargo-update.1
install: removing file /home/ekusiadadus/.rustup/toolchains/dev/share/man/man1/cargo-vendor.1
$ rm -f /home/ekusiadadus/.rustup/toolchains/dev/share/man/man1/cargo-vendor.1
install: removing file /home/ekusiadadus/.rustup/toolchains/dev/share/man/man1/cargo-verify-project.1
$ rm -f /home/ekusiadadus/.rustup/toolchains/dev/share/man/man1/cargo-verify-project.1
install: removing file /home/ekusiadadus/.rustup/toolchains/dev/share/man/man1/cargo-version.1
$ rm -f /home/ekusiadadus/.rustup/toolchains/dev/share/man/man1/cargo-version.1
install: removing file /home/ekusiadadus/.rustup/toolchains/dev/share/man/man1/cargo-yank.1
$ rm -f /home/ekusiadadus/.rustup/toolchains/dev/share/man/man1/cargo-yank.1
install: removing file /home/ekusiadadus/.rustup/toolchains/dev/share/man/man1/cargo.1
$ rm -f /home/ekusiadadus/.rustup/toolchains/dev/share/man/man1/cargo.1
install: removing file /home/ekusiadadus/.rustup/toolchains/dev/share/zsh/site-functions/_cargo
$ rm -f /home/ekusiadadus/.rustup/toolchains/dev/share/zsh/site-functions/_cargo
install: removing file /home/ekusiadadus/.rustup/toolchains/dev/src/etc/bash_completion.d/cargo
$ rm -f /home/ekusiadadus/.rustup/toolchains/dev/src/etc/bash_completion.d/cargo
install: removing component manifest /home/ekusiadadus/.rustup/toolchains/dev/lib/rustlib/manifest-cargo
$ rm /home/ekusiadadus/.rustup/toolchains/dev/lib/rustlib/manifest-cargo
$ echo "rust-analyzer-preview
rustfmt-preview
rust-demangler-preview
clippy-preview
miri-preview
llvm-tools-preview
rust-src
rustc
rust-docs
rust-std-x86_64-unknown-linux-gnu" > "/home/ekusiadadus/.rustup/toolchains/dev/lib/rustlib/components"
$ umask 022 && mkdir -p "/home/ekusiadadus/.rustup/toolchains/dev/lib/rustlib"
$ echo "3" > "/home/ekusiadadus/.rustup/toolchains/dev/lib/rustlib/rust-installer-version"
install: creating uninstall script at /home/ekusiadadus/.rustup/toolchains/dev/lib/rustlib/uninstall.sh
$ cp /home/ekusiadadus/dev/rust/rust/build/tmp/tarball/cargo/x86_64-unknown-linux-gnu/cargo-1.71.0-dev-x86_64-unknown-linux-gnu/install.sh /home/ekusiadadus/.rustup/toolchains/dev/lib/rustlib/uninstall.sh
install: installing component 'cargo'
$ echo "cargo" >> "/home/ekusiadadus/.rustup/toolchains/dev/lib/rustlib/components"
$ umask 022 && mkdir -p "/home/ekusiadadus/.rustup/toolchains/dev/bin"
install: copying file /home/ekusiadadus/.rustup/toolchains/dev/bin/cargo
$ cp /home/ekusiadadus/dev/rust/rust/build/tmp/tarball/cargo/x86_64-unknown-linux-gnu/cargo-1.71.0-dev-x86_64-unknown-linux-gnu/cargo/bin/cargo /home/ekusiadadus/.rustup/toolchains/dev/bin/cargo
$ chmod 755 /home/ekusiadadus/.rustup/toolchains/dev/bin/cargo
$ echo "file:/home/ekusiadadus/.rustup/toolchains/dev/bin/cargo" >> "/home/ekusiadadus/.rustup/toolchains/dev/lib/rustlib/manifest-cargo"
$ umask 022 && mkdir -p "/etc/bash_completion.d"
install: copying file /cargo
$ cp /home/ekusiadadus/dev/rust/rust/build/tmp/tarball/cargo/x86_64-unknown-linux-gnu/cargo-1.71.0-dev-x86_64-unknown-linux-gnu/cargo/etc/bash_completion.d/cargo /cargo
$ chmod 644 /cargo
install: error: file creation failed. see logs at '/home/ekusiadadus/.rustup/toolchains/dev/lib/rustlib/install.log'
```
2023-05-25 11:21:17 +00:00
bors
eb9da7bfa3 Auto merge of #111473 - compiler-errors:opaques, r=lcnr
Handle opaques in the new solver (take 2?)

Implement a new strategy for handling opaques in the new solver.

First, queries now carry both their defining anchor and the opaques that were defined in the inference context at the time of canonicalization. These are both used to pre-populate the inference context used by the canonical query.

Second, use the normalizes-to goal to handle opaque types in the new solver. This means that opaques are handled like projection aliases, but with their own rules:
* Can only define opaques if they're "defining uses" (i.e. have unique params in all their substs).
* Can only define opaques that are from the anchor.
* Opaque type definitions are modulo regions. So that means `Opaque<'?0r> = HiddenTy1` and `Opaque<?'1r> = HiddenTy2` equate `HiddenTy1` and `HiddenTy2` instead of defining them as different opaque type keys.
2023-05-25 08:41:54 +00:00
bors
0b011b7b7e Auto merge of #111933 - matthiaskrgr:rollup-m10k3ts, r=matthiaskrgr
Rollup of 4 pull requests

Successful merges:

 - #95198 (Add slice::{split_,}{first,last}_chunk{,_mut})
 - #109899 (Use apple-m1 as target CPU for aarch64-apple-darwin.)
 - #111624 (Emit diagnostic for privately uninhabited uncovered witnesses.)
 - #111875 (Don't leak the function that is called on drop)

r? `@ghost`
`@rustbot` modify labels: rollup
2023-05-25 06:02:11 +00:00
Matthias Krüger
a9743e108a
Rollup merge of #111875 - WaffleLapkin:defer_on_drop, r=Nilstrieb
Don't leak the function that is called on drop

It probably wasn't causing problems anyway, but still, a `// this leaks, please don't pass anything that owns memory` is not sustainable.

I could implement a version which does not require `Option`, but it would require `unsafe`, at which point it's probably not worth it.
2023-05-25 08:01:08 +02:00
Matthias Krüger
725cadb276
Rollup merge of #111624 - cjgillot:private-uninhabited-pattern, r=petrochenkov
Emit diagnostic for privately uninhabited uncovered witnesses.

Fixes https://github.com/rust-lang/rust/issues/104034

cc `@Nadrieril`
2023-05-25 08:01:08 +02:00
Matthias Krüger
87bb7d8ac7
Rollup merge of #109899 - daxpedda:patch-1, r=jackh726
Use apple-m1 as target CPU for aarch64-apple-darwin.

This updates the target CPU for the `aarch64-apple-darwin` target to `apple-m1`, which is the first generation of CPUs with this target anyway.

This wasn't able to be done before because of the minimum supported version of LLVM being 12, now that it was updated to 13 (in fact we are already at 14), this is available.

See previous update: https://github.com/rust-lang/rust/pull/90478.
See LLVM update: https://github.com/rust-lang/rust/pull/100460.
2023-05-25 08:01:07 +02:00
Matthias Krüger
8497948c7a
Rollup merge of #95198 - clarfonthey:get_chunk, r=scottmcm
Add slice::{split_,}{first,last}_chunk{,_mut}

This adds to the existing tracking issue for `slice::array_chunks` (#74985) under a separate feature, `slice_get_chunk`.

Currently, we have the existing `first`/`last` API for slices:

```rust
impl [T] {
    pub const fn first(&self) -> Option<&T>;
    pub const fn first_mut(&mut self) -> Option<&mut T>;
    pub const fn last(&self) -> Option<&T>;
    pub const fn last_mut(&mut self) -> Option<&mut T>;
    pub const fn split_first(&self) -> Option<(&T, &[T])>;
    pub const fn split_first_mut(&mut self) -> Option<(&mut T, &mut [T])>;
    pub const fn split_last(&self) -> Option<(&T, &[T])>;
    pub const fn split_last_mut(&mut self) -> Option<(&mut T, &mut [T])>;
}
```

This augments it with a `first_chunk`/`last_chunk` API that allows retrieving multiple elements at once:

```rust
impl [T] {
    pub const fn first_chunk<const N: usize>(&self) -> Option<&[T; N]>;
    pub const fn first_chunk_mut<const N: usize>(&mut self) -> Option<&mut [T; N]>;
    pub const fn last_chunk<const N: usize>(&self) -> Option<&[T; N]>;
    pub const fn last_chunk_mut<const N: usize>(&mut self) -> Option<&mut [T; N]>;
    pub const fn split_first_chunk<const N: usize>(&self) -> Option<(&[T; N], &[T])>;
    pub const fn split_first_chunk_mut<const N: usize>(&mut self) -> Option<(&mut [T; N], &mut [T])>;
    pub const fn split_last_chunk<const N: usize>(&self) -> Option<(&[T; N], &[T])>;
    pub const fn split_last_chunk_mut<const N: usize>(&mut self) -> Option<(&mut [T; N], &mut [T])>;
}
```

The code is based off of a copy of the existing API, with the documentation and examples properly modified. Currently, the most common way to perform these kinds of lookups with the existing methods is via `slice.as_chunks::<N>().0[0]` or the worse `slice.as_chunks::<N>().0[slice.len() - N]`, which is substantially less readable than `slice.first_chunk::<N>()` or `slice.last_chunk::<N>()`.

ACP: https://github.com/rust-lang/libs-team/issues/69
2023-05-25 08:01:07 +02:00
ekusiadadus
08ce68b6a6 fix: 🐛 etc/bash_complettion -> src/etc/... to avoid copy error
chore: 🎨 format dist.rs
2023-05-25 14:49:01 +09:00
Michael Goulet
dd98198972 Match on both reveal and solver mode at the same time 2023-05-25 03:35:14 +00:00
Michael Goulet
980da667fe Add InferCtxt::register_hidden_type_in_new_solver 2023-05-25 03:35:14 +00:00
Michael Goulet
97c11ffb22 Strongly prefer alias and param-env bounds 2023-05-25 03:35:14 +00:00
Michael Goulet
a2d806d56d Pre-populate MIR with opaques, prefer subst-relate candidate 2023-05-25 03:35:14 +00:00
bors
776f22292f Auto merge of #111575 - alex:patch-1, r=pietroalbini
Enable sanitizers and profiler for aarch64-unknown-linux-musl

This is pretty heavily cargo-culted, hopefully I didn't screw it up too badly.
2023-05-25 03:21:28 +00:00
Michael Goulet
e3f8beaed6 Check that opaque is a defining use, prefer pre-defined opaques 2023-05-25 03:21:22 +00:00
Michael Goulet
f3c9c21658 Prepopulate opaques in canonical input 2023-05-25 03:21:22 +00:00
Michael Goulet
a2d7ffc635 Move DefiningAnchor 2023-05-25 03:21:21 +00:00
Michael Goulet
4d80b8090c Pull out logic from #111131, plus some new logic in EvalCtxt::normalize_opaque_type
Co-authored-by: lcnr <rust@lcnr.de>
2023-05-25 03:19:15 +00:00
bors
7664dfe433 Auto merge of #111925 - Manishearth:rollup-z6z6l2v, r=Manishearth
Rollup of 5 pull requests

Successful merges:

 - #111741 (Use `ObligationCtxt` in custom type ops)
 - #111840 (Expose more information in `get_body_with_borrowck_facts`)
 - #111876 (Roll compiler_builtins to 0.1.92)
 - #111912 (Use `Option::is_some_and` and `Result::is_ok_and` in the compiler  )
 - #111915 (libtest: Improve error when missing `-Zunstable-options`)

r? `@ghost`
`@rustbot` modify labels: rollup
2023-05-25 00:33:43 +00:00
Manish Goregaokar
8038606bf3
Rollup merge of #111915 - jyn514:libtest-errors, r=thomcc
libtest: Improve error when missing `-Zunstable-options`

"only accepted on the nightly compiler" is misleading when this *is* nightly.
2023-05-24 15:05:05 -07:00
Manish Goregaokar
d0b3ebee66
Rollup merge of #111912 - WaffleLapkin:is_some_and_in_the_compiler, r=petrochenkov
Use `Option::is_some_and` and `Result::is_ok_and` in the compiler

`.is_some_and(..)`/`.is_ok_and(..)` replace `.map_or(false, ..)` and `.map(..).unwrap_or(false)`, making the code more readable.

This PR is a sibling of https://github.com/rust-lang/rust/pull/111873#issuecomment-1561316515
2023-05-24 15:05:05 -07:00
Manish Goregaokar
33ded73c76
Rollup merge of #111876 - danakj:builtins92, r=Mark-Simulacrum
Roll compiler_builtins to 0.1.92

This pulls in the weak-intrinsics feature (which currently defaults off), and a minor version update to libm for the compiler_builtins crate to 0.2.7.
2023-05-24 15:05:04 -07:00
Manish Goregaokar
b84ab57f90
Rollup merge of #111840 - voidc:borrowck-consumers, r=oli-obk
Expose more information in `get_body_with_borrowck_facts`

Verification tools for Rust such as, for example, Creusot or Prusti would benefit from having access to more information computed by the borrow checker.
As a first step in that direction, #86977 added the `get_body_with_borrowck_facts` API, allowing compiler consumers to obtain a `mir::Body` with accompanying borrow checker information.
At RustVerify 2023, multiple people working on verification tools expressed their need for a more comprehensive API.
While eventually borrow information could be part of Stable MIR, in the meantime, this PR proposes a more limited approach, extending the existing `get_body_with_borrowck_facts` API.
In summary, we propose the following changes:

- Permit obtaining the borrow-checked body without necessarily running Polonius
- Return the `BorrowSet` and the `RegionInferenceContext` in `BodyWithBorrowckFacts`
- Provide a way to compute the `borrows_out_of_scope_at_location` map
- Make some helper methods public

This is similar to #108328 but smaller in scope.
`@smoelius` Do you think these changes would also be sufficient for your needs?

r? `@oli-obk`
cc `@JonasAlaif`
2023-05-24 15:05:04 -07:00
Manish Goregaokar
a9a4c9b3db
Rollup merge of #111741 - compiler-errors:custom-type-op, r=lcnr
Use `ObligationCtxt` in custom type ops

We already make one when evaluating the `CustomTypeOp`, so it's simpler to just pass it to the user. Removes a redundant `ObligationCtxt::new_in_snapshot` usage and simplifies some other code.

This makes several refactorings related to opaque types in the new solver simpler, but those are not included in this PR.
2023-05-24 15:05:03 -07:00
bors
096309e6dc Auto merge of #111919 - matthiaskrgr:rollup-8qcdp0q, r=matthiaskrgr
Rollup of 6 pull requests

Successful merges:

 - #111121 (Work around `rust-analyzer` false-positive type errors)
 - #111759 (Leverage the interval property to precompute borrow kill points.)
 - #111841 (Run AST validation on match guards correctly)
 - #111862 (Split out opaque collection from from `type_of`)
 - #111863 (Don't skip mir typeck if body has errors)
 - #111903 (Migrate GUI colors test to original CSS color format)

r? `@ghost`
`@rustbot` modify labels: rollup
2023-05-24 21:56:17 +00:00
Matthias Krüger
0cc987fae2
Rollup merge of #111903 - GuillaumeGomez:migrate-gui-test-color-6, r=notriddle
Migrate GUI colors test to original CSS color format

Follow-up of https://github.com/rust-lang/rust/pull/111459.

r? `@notriddle`
2023-05-24 21:36:58 +02:00
Matthias Krüger
680f8b8efe
Rollup merge of #111863 - compiler-errors:check-more-mir, r=b-naber
Don't skip mir typeck if body has errors

Comment says:

```
// if verifier failed, don't do further checks to avoid ICEs
```

But there are no ICEs to be found. The comment is quite old, so perhaps something fixed it... maybe because the MIR typechecker is delaying span bugs rather than panicking via eager bugs? IDK

I'm generally inclined to fix the ICEs themselves that were to arise from this, rather than just totally skipping large parts of the compiler that have impacts on downstream logic (namely, our opaque type results are affected). Anyways, this happens on the error path, so it shouldn't really matter.

Fixes this hack: https://github.com/rust-lang/rust/pull/111853/files#r1201501540
2023-05-24 21:36:58 +02:00
Matthias Krüger
d09ee575ee
Rollup merge of #111862 - compiler-errors:opq, r=lcnr
Split out opaque collection from from `type_of`

requested by lcnr

r? `@lcnr`
2023-05-24 21:36:57 +02:00
Matthias Krüger
092352f6fd
Rollup merge of #111841 - matthewjasper:validate-match-guards, r=compiler-errors
Run AST validation on match guards correctly

AST validation was being skipped on match guards other than `if let` guards.
2023-05-24 21:36:57 +02:00
Matthias Krüger
52890cc719
Rollup merge of #111759 - cjgillot:interval-kill, r=b-naber
Leverage the interval property to precompute borrow kill points.
2023-05-24 21:36:56 +02:00
Matthias Krüger
09489b9137
Rollup merge of #111121 - Zalathar:ra-false-positive, r=jackh726
Work around `rust-analyzer` false-positive type errors

rust-analyzer incorrectly reports two type errors in `debug.rs`:

> expected &dyn Display, found &i32
> expected &dyn Display, found &i32

This is due to a known bug in r-a: (https://github.com/rust-lang/rust-analyzer/issues/11847).

In these particular cases, changing `&0` to `&0i32` seems to be enough to avoid the bug.
2023-05-24 21:36:56 +02:00
Camille GILLOT
9a7ed3625f Emit diagnostic for privately uninhabited uncovered witnesses. 2023-05-24 19:16:07 +00:00
bors
c373194cb6 Auto merge of #111260 - petrochenkov:effvisperf7, r=cjgillot
rustc_privacy: Cleanups and perf improvements to `EmbargoVisitor`

Continuation of https://github.com/rust-lang/rust/pull/110907.
2023-05-24 19:02:19 +00:00
Michael Goulet
d7ccbdd696 Split out opaque from type_of 2023-05-24 17:23:58 +00:00
Michael Goulet
b1387e776c Don't skip mir typeck if body has errors 2023-05-24 17:12:46 +00:00
bors
97d328012b Auto merge of #111673 - cjgillot:dominator-preprocess, r=cjgillot,tmiasko
Preprocess and cache dominator tree

Preprocessing dominators has a very strong effect for https://github.com/rust-lang/rust/pull/111344.
That pass checks that assignments dominate their uses repeatedly. Using the unprocessed dominator tree caused a quadratic runtime (number of bbs x depth of the dominator tree).

This PR also caches the dominator tree and the pre-processed dominators in the MIR cfg cache.

Rebase of https://github.com/rust-lang/rust/pull/107157
cc `@tmiasko`
2023-05-24 16:18:21 +00:00
jyn
9314ed0cbd libtest: Improve error when missing -Zunstable-options
"only accepted on the nightly compiler" is misleading when this *is* nightly.
2023-05-24 11:18:20 -05:00
Michael Goulet
521a0bcd1f Use ObligationCtxt in custom type ops 2023-05-24 16:06:32 +00:00
Maybe Waffle
307799a711 Use is_some_and/is_ok_and in less obvious spots 2023-05-24 14:33:43 +00:00
Maybe Waffle
fb0f74a8c9 Use Option::is_some_and and Result::is_ok_and in the compiler 2023-05-24 14:20:41 +00:00
bors
b3cbf7c835 Auto merge of #111694 - Amanieu:no-assume-bdynamic, r=petrochenkov
Don't assume that `-Bdynamic` is the default linker mode

In particular this is false when passing `-static` or `-static-pie` to the linker, which changes the default to `-Bstatic`. This PR ensures we explicitly initialize the correct mode when we first need it.
2023-05-24 13:35:30 +00:00
Guillaume Gomez
0a7293ff00 Migrate GUI colors test to original CSS color format 2023-05-24 14:41:18 +02:00
bors
70db836922 Auto merge of #111566 - clubby789:bootstrap-override-config, r=ozkanonur
Override config.toml options from command line

https://rust-lang.zulipchat.com/#narrow/stream/326414-t-infra.2Fbootstrap/topic/Running.20tests.20on.20precompiled.20rustc/near/357763280

cc `@jyn514`
2023-05-24 10:56:34 +00:00
bors
d69787f098 Auto merge of #111195 - GuillaumeGomez:fix-ice-intra-doc-link, r=petrochenkov
Prevent crash when a path is not resolved in intra-doc link

Fixes https://github.com/rust-lang/rust/issues/111189.

cc `@petrochenkov`
r? `@notriddle`
2023-05-24 07:49:53 +00:00
bors
82faf5ed60 Auto merge of #111895 - matthiaskrgr:rollup-9a6szng, r=matthiaskrgr
Rollup of 5 pull requests

Successful merges:

 - #111861 (Don't ICE on return-type notation when promoting trait preds to associated type bounds)
 - #111864 (Always require closure parameters to be `Sized`)
 - #111870 (Rename `traits_in_crate` query to `traits`)
 - #111880 (Don't ICE when computing PointerLike trait when region vars are in param-env)
 - #111887 (Add regression tests for pretty-printing inherent projections)

r? `@ghost`
`@rustbot` modify labels: rollup
2023-05-24 05:07:22 +00:00
Matthias Krüger
d49d347f15
Rollup merge of #111887 - fmease:inh-proj-pp-tests, r=compiler-errors
Add regression tests for pretty-printing inherent projections

Tests for #111486.
Fixes #111879.

r? `@matthiaskrgr`
2023-05-24 06:05:39 +02:00
Matthias Krüger
8227c4fd6e
Rollup merge of #111880 - compiler-errors:pointer-like-param-env, r=jackh726
Don't ICE when computing PointerLike trait when region vars are in param-env

Fixes #111877
2023-05-24 06:05:39 +02:00
Matthias Krüger
783bea940b
Rollup merge of #111870 - WaffleLapkin:just_🌟traits🌟_query, r=compiler-errors
Rename `traits_in_crate` query to `traits`

> NOTE: Not named just `traits` due to a naming conflict.

This can, in fact, be easily avoided.
2023-05-24 06:05:38 +02:00