Commit graph

128191 commits

Author SHA1 Message Date
bors
9ea4d4127f Auto merge of #96414 - Dylan-DPC:rollup-t4ofhoa, r=Dylan-DPC
Rollup of 6 pull requests

Successful merges:

 - #90312 (Fix some confusing wording and improve slice-search-related docs)
 - #96149 (Remove unused macro rules)
 - #96279 (rustdoc: Remove .woff font files)
 - #96355 (Better handle too many `#` recovery in raw str)
 - #96379 (delay bug when adjusting `NeverToAny` twice during diagnostic code)
 - #96384 (do not consider two extern types to be similar)

Failed merges:

r? `@ghost`
`@rustbot` modify labels: rollup
2022-04-26 01:52:46 +00:00
Dylan DPC
f0b2dccc21
Rollup merge of #96384 - lcnr:extern-types-similar, r=compiler-errors
do not consider two extern types to be similar
2022-04-26 01:21:24 +02:00
Dylan DPC
8038a9ece3
Rollup merge of #96379 - PrestonFrom:issue_96335, r=compiler-errors
delay bug when adjusting `NeverToAny` twice during diagnostic code

Addresses Issue 96335 (https://github.com/rust-lang/rust/issues/96335) by using `delay_span_bug` instead of an assert and returning an error type from `check_expr_meets_expectation_or_error`.

Fixes #96335
2022-04-26 01:21:23 +02:00
Dylan DPC
77031f3d99
Rollup merge of #96355 - estebank:issue-95030, r=compiler-errors
Better handle too many `#` recovery in raw str

Point at all the unnecessary trailing `#`.
Better handle interaction with outer attributes when `;` is missing.

Fix #95030.
2022-04-26 01:21:22 +02:00
Dylan DPC
2381897f27
Rollup merge of #96279 - GuillaumeGomez:remove-woff-fonts, r=camelid,jsha
rustdoc: Remove .woff font files

Copying `@jsha's` great comment:

> Right now we ship 1.5MB of woff files in the rustdoc binary, and 1MB of woff2 files, for a total of 2.5MB.
>
> Per:
>
> https://caniuse.com/woff
> https://caniuse.com/woff2
>
> The only listed browser that supports woff and not woff2 is IE, which is not supported per https://github.com/rust-lang/rfcs/blob/master/text/1985-tiered-browser-support.md.
>
> I propose we stop shipping woff files and save 1.5MB from the rustdoc binary (and from each doc build).

r? `@jsha`
2022-04-26 01:21:21 +02:00
bors
ec8619dca2 Auto merge of #96294 - Emilgardis:def_id-in-unsafetyviolationdetails, r=oli-obk
Display function path in unsafety violations - E0133

adds `DefId` to `UnsafetyViolationDetails`

this enables consumers to access the function definition that was reported to be unsafe and also changes the output for some E0133 diagnostics
2022-04-25 23:03:50 +00:00
bors
055bf4ccd5 Auto merge of #96116 - ouz-a:mir-opt, r=oli-obk
Make derefer work everwhere

Follow up work on previous PR's #95649 and #95857.

r? rust-lang/mir-opt

_Co-Authored-By: `@oli-obk_`
2022-04-25 19:34:52 +00:00
bors
18b53cefdf Auto merge of #95604 - nbdd0121:used2, r=petrochenkov
Generate synthetic object file to ensure all exported and used symbols participate in the linking

Fix #50007 and #47384

This is the synthetic object file approach that I described in https://github.com/rust-lang/rust/pull/95363#issuecomment-1079932354, allowing all exported and used symbols to be linked while still allowing them to be GCed.

Related #93791, #95363

r? `@petrochenkov`
cc `@carbotaniuman`
2022-04-25 16:14:54 +00:00
Emil Gardström
f71597cb59
avoid fully qualifying error output of issue-43733 test 2022-04-25 11:29:39 +02:00
bors
756ffb8d0b Auto merge of #95246 - ChrisDenton:command-args, r=joshtriplett
Windows Command: Don't run batch files using verbatim paths

Fixes #95178

Note that the first commit does some minor refactoring (moving command line argument building to args.rs). The actual changes are in the second.
2022-04-25 07:28:09 +00:00
lcnr
5594db0975 do not consider two extern types to be similar 2022-04-25 08:51:26 +02:00
Preston From
5165295452 Delay bug when adjusting NeverToAny twice during diagnostic 2022-04-24 23:52:55 -06:00
bors
fedbe5dabc Auto merge of #96106 - jihiggins:issue-96060, r=Mark-Simulacrum
Add type_name info to [TIMING] log output

Adds type_name to the [TIMING] log output:
```
[TIMING] (bootstrap::compile::Sysroot) Sysroot { compiler: Compiler { stage: 0, host: TargetSelection { triple: "x86_64-unknown-linux-gnu", file: None } } } -- 0.020
[TIMING] (bootstrap::builder::Builder::sysroot_libdir::Libdir) Libdir { compiler: Compiler { stage: 0, host: TargetSelection { triple: "x86_64-unknown-linux-gnu", file: None } }, target: TargetSelection { triple: "x86_64-unknown-linux-gnu", file: None } } -- 0.007
```

Not sure if that's the best way to format it. Thought about replacing the struct's name with the type_name output, but that feels kind of hacky?

Closes #96060
2022-04-25 04:24:10 +00:00
Matthias Krüger
f5837f8392
Rollup merge of #96366 - jyn514:remove-dead-code, r=Mark-Simulacrum
bootstrap: Remove dead code in rustdoc shim

The `RUSTDOC_RESOURCE_SUFFIX` variable was never actually set.
2022-04-25 00:11:03 +02:00
Matthias Krüger
433f1f425e
Rollup merge of #96215 - nikic:legacy-pm-removal, r=nagisa
Drop support for legacy PM with LLVM 15

LLVM 15 already removes some of the legacy PM APIs we're using. This patch forces use of NewPM with LLVM 15 (with `-Z new-llvm-pass-manager=no` throwing a warning) and stubs out various FFI methods with a report_fatal_error on LLVM 15.

For LLVMPassManagerBuilderPopulateLTOPassManager() I went with adding our own wrapper, as the alternative would be to muck about with weak symbols, which seems to be non-trivial as far as cross-platform support is concerned (std has `weak!` for this purpose, but only as an internal utility.)

Fixes #96072.
Fixes #96362.
2022-04-25 00:11:02 +02:00
Matthias Krüger
50294f69cd
Rollup merge of #96212 - marmeladema:nll-revisions-regions, r=jackh726
Use revisions instead of nll compare mode for `/regions/` ui tests

Created https://github.com/rust-lang/rust/issues/96211 for the duplicated mismatched types errors

r? `@jackh726`
2022-04-25 00:11:01 +02:00
Matthias Krüger
ddbeda1302
Rollup merge of #96090 - JakobDegen:mir-tests, r=nagisa
Implement MIR opt unit tests

This implements rust-lang/compiler-team#502 .

There's not much to say here, this implementation does everything as proposed. I also added the flag to a bunch of existing tests (mostly those to which I could add it without causing huge diffs due to changes in line numbers). Summarizing the changes to test outputs:
 - Every time an `MirPatch` is created, it adds a cleanup block to the body if it did not exist already. If this block is unused (as is usually the case), it usually gets removed soon after by some pass calling `SimplifyCFG` for unrelated reasons (in many cases this cycle happens quite a few times for a single body). We now run `SimplifyCFG` less often, so those blocks end up in some of our outputs. I looked at changing `MirPatch` to not do this, but that seemed too complicated for this PR. I may still do that in a follow-up.
 - The `InstCombine` test had set `-C opt-level=0` in its flags and so there were no storage markers. I don't really see a good motivation for doing this, so bringing it back in line with what everything else does seems correct.
 - One of the `EarlyOtherwiseBranch` tests had `UnreachableProp` running on it. Preventing that kind of thing is the goal of this feature, so this seems fine.

For the remaining tests for which this feature might be useful, we can gradually migrate them as opportunities present themselves.

In terms of documentation, I plan on submitting a PR to the rustc dev guide in the near future documenting this and other recent changes to MIR. If there's any other places to update, do let me know

r? `@nagisa`
2022-04-25 00:10:59 +02:00
Michael Goulet
319fbe371d Fix suggestion for _ on return type for fn in impl for Trait 2022-04-24 14:50:48 -07:00
Michael Goulet
42dbbabcb0 Suggest replacing _ in type signature of impl for Trait 2022-04-24 14:49:29 -07:00
Joshua Nelson
68ef667b2e Remove dead code in rustdoc shim
The `RUSTDOC_RESOURCE_SUFFIX` variable was never actually set.
2022-04-24 14:53:49 -05:00
marmeladema
e10aa1586d Use revisions instead of nll compare mode for /regions/ ui tests 2022-04-24 21:30:35 +02:00
Emil Gardström
2e47271cb8
only show a simple description in E0133 span label 2022-04-24 18:33:07 +02:00
Emil Gardström
8b8f6653cf
add DefId to unsafety violations and display function path in E0133
this enables consumers to access the function definition that was reported to be unsafe
2022-04-24 18:33:06 +02:00
Matthias Krüger
aef9eb50cd
Rollup merge of #96352 - marmeladema:fix-nll-lifetime-bound-suggestions, r=jackh726
Improve span for `consider adding an explicit lifetime bound` suggestions under NLL

Because NLL borrowck is run after typeck, `in_progress_typeck_results` was always `None` which was preventing the retrieval of the span to which the suggestion is suppose to add the lifetime bound.
We now manually pass the `LocalDefId` owner to `construct_generic_bound_failure` so that under NLL, we give the owner id of the current body.

This helps with #96332
2022-04-24 18:00:27 +02:00
Matthias Krüger
7daa1c92ec
Rollup merge of #96303 - jyn514:improved-bootstrap-tests, r=Mark-Simulacrum
Improve bootstrap tests

- Don't checkout submodules in bootstrap tests

  This doesn't cause any tests to fail, and can greatly speed them up.

- Add a test for --exclude test::XXX

  I didn't know that the `test::` syntax was valid before, and it doesn't seem to be documented anywhere. Add a test so it doesn't regress accidentally, and as executable documentation.
  This also moves the `exclude` tests out of `dist`, to avoid assertion errors when the `cmd` passed to configure didn't match the `subcommand` used.

- Use run_build helper consistently across most bootstrap tests
  This is not super important to do, but the consistency is nice.

  I didn't change any tests that call `configure("dist")` and then override the subcommand - doing
that at all is pretty sketchy, but I don't want to mess with it while already doing a refactor.

Found while working on the "one call to Step for all paths" change mentioned in https://github.com/rust-lang/rust/pull/95503#issuecomment-1105914384, but independent of that work.

cc `@pietroalbini` for the `--exclude` test, git blame says you added support for it originally.
2022-04-24 18:00:27 +02:00
Matthias Krüger
e1935cc196
Rollup merge of #96237 - AlecGoncharow:issue-96011-fix, r=Mark-Simulacrum
compiletest: combine `--*-python` args

Since these arguments are now always the same, combine them into a
singular `--python` argument.

Fixes #96011
2022-04-24 18:00:26 +02:00
Matthias Krüger
472404039e
Rollup merge of #95504 - jyn514:library-alias, r=Mark-Simulacrum
Add `x {check,build,doc} {compiler,library}` aliases.

While working on https://github.com/rust-lang/rust/pull/95503, I realized that it will interfere with existing command lines:
Currently people run `x build library/std` expecting it to "add all library crates to the sysroot",
but after that change, it will *only* build `libstd` and its dependencies (and add them to the sysroot), not libtest or libproc_macro.

That will work for local testing in most cases, but could be confusing. Even if not, though, I think `x build library` is more clear about what actually happens than the current `x build library/std`.

The intended end goal is something like:
- For check/build/doc, we have library + compiler aliases, which correspond to basically "most possible" for that piece. This is the intended path of entry (rather than library/test or similar as today) for when you just want the thing to work -- for example, getting a compiler that is "crates.io-compatible" would be roughly `x.py build library`). #95504
- Specific crate invocations build up to that crate, which means that if you don't care about tests you probably want x.py build library/proc_macro or library/std for faster build times. #95503

Note that this is already implemented today for the `doc` command and seems to work pretty well in practice.

I plan to change the dev-guide and various instructions in the README to `build library` once this is merged.

`@rustbot` label +A-rustbuild
2022-04-24 18:00:25 +02:00
James Higgins
0fea00759f Add type_name info to [TIMING] log output 2022-04-24 11:24:04 -04:00
Michael Howell
40c9bc06bf diagnostics: regression test for <usize as Iterator>::rev
Closes #90315
2022-04-24 11:14:13 -04:00
marmeladema
8d561d25e3 Bless tests 2022-04-24 17:04:31 +02:00
marmeladema
53120b59ae Recover missing suggestion part under NLL 2022-04-24 09:36:23 +02:00
marmeladema
7b0db3e7c8 Improve span for consider adding an explicit lifetime bound suggestions under NLL
Because NLL borrowck is run after typeck, `in_progress_typeck_results`
was always `None` which was preventing the retrieval of the span to which
the suggestion is suppose to add the lifetime bound.

We now manually pass the `LocalDefId` owner to `construct_generic_bound_failure`
so that under NLL, we give the owner id of the current body.
2022-04-24 09:34:50 +02:00
Jeremy Fitzhardinge
9102edf208 Add support for nounused --extern flag
This adds `nounused` to the set of extern flags:
`--extern nounused:core=/path/to/core/libcore.rlib`.

The effect of this flag is to suppress `unused-crate-dependencies`
warnings relating to the crate.
2022-04-23 23:31:54 -07:00
Esteban Küber
3587406967 Better handle too many # recovery in raw str
Point at all the unnecessary trailing `#`.
Better handle interaction with outer attributes when `;` is missing.

Fix #95030.
2022-04-23 19:51:11 -07:00
bors
143eaa8d44 Auto merge of #93970 - cjgillot:novis, r=petrochenkov
Remove visibility information from HIR

The resolver exports all the necessary visibility information through the `tcx.visibility` query.
This PR stops having a dedicated visibility field in HIR, in order to use this query.
We keep a `vis_span` field for diagnostic purposes.
2022-04-23 22:25:51 +00:00
Camille GILLOT
0a6e1350e0 Bless pretty-print output. 2022-04-23 23:03:18 +02:00
Camille GILLOT
88de3e52e4 Make clippy inspector more precise. 2022-04-23 23:03:18 +02:00
Camille GILLOT
423a712a16 Fix lints. 2022-04-23 23:01:19 +02:00
bors
6b4563bf93 Auto merge of #90602 - mbartlett21:const-intoiterator, r=oli-obk
Unstably constify `impl<I: Iterator> IntoIterator for I`

This constifies the default `IntoIterator` implementation under the `const_intoiterator_identity` feature.

Tracking Issue: #90603
2022-04-23 15:41:45 +00:00
bors
1e9aa8a96b Auto merge of #95971 - workingjubilee:no-weird-fp-in-const, r=oli-obk
No "weird" floats in const fn {from,to}_bits

I suspect this code is subtly incorrect and that we don't even e.g. use x87-style floats in CTFE, so I don't have to guard against that case. A future PR will be hopefully removing them from concern entirely, anyways. But at the moment I wanted to get this rolling because small questions like that one seem best answered by review.

r? `@oli-obk`
cc `@eddyb` `@thomcc`
2022-04-23 13:00:54 +00:00
Camille GILLOT
daccecc0ec Bless incremental tests. 2022-04-23 09:59:27 +02:00
Camille GILLOT
4bbe078d92 Drop vis in Item. 2022-04-23 09:59:24 +02:00
Camille GILLOT
a6e3124d2c Drop vis in ImplItem. 2022-04-23 09:57:00 +02:00
Camille GILLOT
a62680d108 Drop vis in FieldDef. 2022-04-23 09:56:15 +02:00
Camille GILLOT
10d10efb21 Stop visiting visibility. 2022-04-23 09:53:45 +02:00
bors
09064a21b0 Auto merge of #96316 - michaelwoerister:debuginfo-fix-unit-msvc, r=wesleywiser
debuginfo: Emit ZST struct debuginfo for unit type when CPP-like debuginfo is enabled

As already discovered in 24a728a8eb, PDB does not play well with custom basic types. This PR extends to the fix to `()`: Instead of a custom basic type, we treat it like an empty tuple (i.e. it is described as a struct which happens to have no fields).

Before this change anything with a `()` in it would cause trouble, which is especially bad for `*const ()` and `*mut ()` which are often used for opaque pointers. E.g. the test case added in this PR would look like:
```
0:000>  dx _ref
Error: Unable to bind name '_ref'
0:000>  dx _ptr
Error: Unable to bind name '_ptr'
0:000>  dx _local
Error: Unable to bind name '_local'
0:000>  dx _field,d
_field,d         [Type: unit_type::_TypeContainingUnitField]
    [+0x008] _a               : 123 [Type: unsigned int]
    [+0x000] _unit            : Unexpected failure to dereference object
    [+0x000] _b               : 456 [Type: unsigned __int64]
0:000>  dx ((__int64 *)_ptr),x
Error: Unable to bind name '_ptr'
```

With the PR it produces the expected output:
```
0:000>  dx _ref
_ref             : 0x7ff6f2012230 : () [Type: tuple$<> *]
0:000>  dx _ptr
_ptr             : 0x7e8ddffc20 : () [Type: tuple$<> *]
0:000>  dx _local
_local           : () [Type: tuple$<>]
0:000>  dx _field,d
_field,d         [Type: unit_type::_TypeContainingUnitField]
    [+0x008] _a               : 123 [Type: unsigned int]
    [+0x000] _unit            : () [Type: tuple$<>]
    [+0x000] _b               : 456 [Type: unsigned __int64]
0:000>  dx ((__int64 *)_ptr),x
((__int64 *)_ptr),x : 0x7e8ddffc20 : 0x1122334455667788 [Type: __int64 *]
```

r? `@wesleywiser`
2022-04-23 07:12:52 +00:00
bors
f4ec0e7cff Auto merge of #96322 - matthiaskrgr:rollup-9xejxrf, r=matthiaskrgr
Rollup of 3 pull requests

Successful merges:

 - #96272 (Update `validate_uninhabited_zsts.rs` test after MIR building changes)
 - #96273 (Make `E0117` error clear)
 - #96315 (Make the lifetime accurate which is used in the region constraints part)

Failed merges:

r? `@ghost`
`@rustbot` modify labels: rollup
2022-04-22 19:28:05 +00:00
Matthias Krüger
b100c02fae
Rollup merge of #96273 - TaKO8Ki:make-E0117-error-clear, r=davidtwco
Make `E0117` error clear

closes #96227
2022-04-22 18:56:25 +02:00
Matthias Krüger
98346744ac
Rollup merge of #96272 - tmiasko:validate-uninhabited, r=RalfJung
Update `validate_uninhabited_zsts.rs` test after MIR building changes

to ensure that it still tests validation, instead of failing earlier on
during evaluation.

r? `@RalfJung`
2022-04-22 18:56:24 +02:00
bors
5ffebc2cb3 Auto merge of #96301 - notriddle:notriddle/synthetic-impl-prim, r=GuillaumeGomez
rustdoc: make primitive synthetic impls for correct doc module

This improves the accuracy of libcore primitive docs, which was missing the blanket and auto impls for most primitive types. To test this, compare nightly [libcore::str] docs, which lack auto traits like Send, with [std::str] docs, which show them.

[libcore::str]: https://doc.rust-lang.org/nightly/core/primitive.str.html
[libstd::str]: https://doc.rust-lang.org/nightly/std/primitive.str.html

It also avoids getting synthetic impls for primitive types on crates that do not actually show them.

<details>

<summary>Before and After trace logs</summary>

## Before

	[notriddle@deep-thought test-dingus]$ RUSTDOC_LOG=rustdoc=trace rustdoc +nightly test.rs 2>&1 | grep -E 'get_blanket_impls\('
	TRACE rustdoc::clean::blanket_impl get_blanket_impls(Whatever)
	TRACE rustdoc::clean::blanket_impl get_blanket_impls(isize)
	TRACE rustdoc::clean::blanket_impl get_blanket_impls([T])
	TRACE rustdoc::clean::blanket_impl get_blanket_impls([u8])
	TRACE rustdoc::clean::blanket_impl get_blanket_impls([T])
	TRACE rustdoc::clean::blanket_impl get_blanket_impls([u8])
	TRACE rustdoc::clean::blanket_impl get_blanket_impls(char)
	TRACE rustdoc::clean::blanket_impl get_blanket_impls(u128)
	TRACE rustdoc::clean::blanket_impl get_blanket_impls(u16)
	TRACE rustdoc::clean::blanket_impl get_blanket_impls(i128)
	TRACE rustdoc::clean::blanket_impl get_blanket_impls(i16)
	TRACE rustdoc::clean::blanket_impl get_blanket_impls(str)
	TRACE rustdoc::clean::blanket_impl get_blanket_impls(str)
	TRACE rustdoc::clean::blanket_impl get_blanket_impls(f64)
	TRACE rustdoc::clean::blanket_impl get_blanket_impls(f64)
	TRACE rustdoc::clean::blanket_impl get_blanket_impls(u64)
	TRACE rustdoc::clean::blanket_impl get_blanket_impls(u8)
	TRACE rustdoc::clean::blanket_impl get_blanket_impls(i64)
	TRACE rustdoc::clean::blanket_impl get_blanket_impls(i8)
	TRACE rustdoc::clean::blanket_impl get_blanket_impls(*const T)
	TRACE rustdoc::clean::blanket_impl get_blanket_impls(*mut T)
	TRACE rustdoc::clean::blanket_impl get_blanket_impls(*const [T])
	TRACE rustdoc::clean::blanket_impl get_blanket_impls(*mut [T])
	TRACE rustdoc::clean::blanket_impl get_blanket_impls([T; N])
	TRACE rustdoc::clean::blanket_impl get_blanket_impls(bool)
	TRACE rustdoc::clean::blanket_impl get_blanket_impls(f32)
	TRACE rustdoc::clean::blanket_impl get_blanket_impls(f32)
	TRACE rustdoc::clean::blanket_impl get_blanket_impls(u32)
	TRACE rustdoc::clean::blanket_impl get_blanket_impls(usize)
	TRACE rustdoc::clean::blanket_impl get_blanket_impls(i32)

## After

	[notriddle@deep-thought test-dingus]$ RUSTDOC_LOG=rustdoc=trace rustdoc +dev test.rs 2>&1 | grep -E 'get_blanket_impls\('
	TRACE rustdoc::clean::blanket_impl get_blanket_impls(Whatever)

</details>
2022-04-22 16:47:13 +00:00