Commit graph

241417 commits

Author SHA1 Message Date
Michael Goulet 5b0b7cd8f9 Move type relations into submodule in rustc_infer 2023-12-15 18:13:40 +00:00
bors 3f39cae119 Auto merge of #115165 - davidtwco:issue-9228-describe-item-member-visibility, r=wesleywiser
codegen_llvm: set `DW_AT_accessibility`

Fixes #9228.
Based on #74778.

Sets the accessibility of types and fields in DWARF using `DW_AT_accessibility` attribute.

`DW_AT_accessibility` (public/protected/private) isn't exactly right for Rust,  but neither is `DW_AT_visibility` (local/exported/qualified), and there's no way to set `DW_AT_visbility` in LLVM's API. Debuggers will special-case the handling of these per-language anyway.

r? `@wesleywiser` (visited in wg-debugging triage)
2023-12-15 17:13:04 +00:00
Maybe Waffle b863e9ba57
Stabilize ptr::{from_ref, from_mut} 2023-12-15 08:34:59 -08:00
Michael Goulet bc1ca6b528 Fix enforcement of generics for associated items 2023-12-15 16:17:28 +00:00
Cameron Steffen 04fafd69de Cfg remove lang items in doctest 2023-12-15 16:17:28 +00:00
Michael Goulet 553c3c44b2 Appease the tools: clippy, rustdoc 2023-12-15 16:17:27 +00:00
Michael Goulet 653ca5ad3b Simplify instantiate_poly_trait_ref 2023-12-15 16:17:27 +00:00
Michael Goulet fc010de26b banish hir::GenericBound::LangItemTrait 2023-12-15 16:17:27 +00:00
Michael Goulet ad00641b74 Collect lang items from AST 2023-12-15 16:12:27 +00:00
Michael Goulet 252d99a54b Fix comments 2023-12-15 16:08:26 +00:00
Michael Goulet 7f565ed282 Don't pass lint back out of lint decorator 2023-12-15 16:05:36 +00:00
Michael Howell 6bbbff5189 rustdoc: add regression test for JS data file loading
Follow up for #118961
2023-12-15 08:56:49 -07:00
Guillaume Gomez 028a3135c8 Simplify JS code a little bit 2023-12-15 16:56:11 +01:00
Yuki Okushi c3dd266f47
Remove @JohnTitor from diagnostics pings
I've been inactive around diagnostics for a while so would like to remove myself from the diagnostics-related ping groups for now.
2023-12-16 00:15:15 +09:00
bors e6707df0de Auto merge of #118982 - matthiaskrgr:rollup-xoraxf4, r=matthiaskrgr
Rollup of 3 pull requests

Successful merges:

 - #118962 (Annotate some bugs)
 - #118969 (coverage: Use `Waker::noop` in async tests)
 - #118974 (Annotate panic! reasons during enum layout)

Failed merges:

 - #111658 (Refactor pre-getopts command line argument handling)
 - #117449 (Avoid silencing relevant follow-up errors)

r? `@ghost`
`@rustbot` modify labels: rollup
2023-12-15 15:01:55 +00:00
Matthias Krüger 88a9619d74
Rollup merge of #118974 - workingjubilee:why-worry-about-enum-abi, r=davidtwco
Annotate panic! reasons during enum layout

Add some reasons to the panics, and use more exhaustive matches.

Also see: #118955
2023-12-15 15:53:52 +01:00
Matthias Krüger b9a6f19f19
Rollup merge of #118969 - Zalathar:waker-noop, r=compiler-errors
coverage: Use `Waker::noop` in async tests

Inspired by #118948.

---

`@rustbot` label +A-code-coverage
2023-12-15 15:53:51 +01:00
Matthias Krüger 2f8867e03c
Rollup merge of #118962 - compiler-errors:bugs, r=TaKO8Ki
Annotate some bugs

Gives a semi-helpful message to some `bug!()`/`unreachable!()`/`panic!()`. This also works around some other bugs/panics/etc that weren't needed, and also makes some of them into `span_bug!`s so they also have a useful span.

Note to reviewer: best to disable whitespace when comparing for some cases where indentation changed.

cc #118955
2023-12-15 15:53:51 +01:00
Michael Goulet 1cc0d7d56c Annotate some more bugs 2023-12-15 14:45:06 +00:00
Michael Goulet 70b9dad3dc Annotate some bugs 2023-12-15 14:45:06 +00:00
Arthur Carcano 8142e8555a Remove an unneeded allocation 2023-12-15 15:01:49 +01:00
bors 4d1bd0db7f Auto merge of #118975 - GuillaumeGomez:rollup-0emhjx0, r=GuillaumeGomez
Rollup of 4 pull requests

Successful merges:

 - #113091 (Don't merge cfg and doc(cfg) attributes for re-exports)
 - #115660 (rustdoc: allow resizing the sidebar / hiding the top bar)
 - #118863 (rustc_mir_build: Enforce `rustc::potential_query_instability` lint)
 - #118909 (Some cleanup and improvement for invalid ref casting impl)

r? `@ghost`
`@rustbot` modify labels: rollup
2023-12-15 12:49:36 +00:00
Wesley Wiser ce290514df
Adapt debug-accessibility tests for msvc-style enums 2023-12-15 11:45:03 +00:00
David Wood 07931c5a08
codegen_llvm: set DW_AT_accessibility
Sets the accessibility of types and fields in DWARF using
`DW_AT_accessibility` attribute.

`DW_AT_accessibility` (public/protected/private) isn't exactly right for
Rust,  but neither is `DW_AT_visibility` (local/exported/qualified), and
there's no way to set `DW_AT_visbility` in LLVM's API.

Signed-off-by: David Wood <david@davidtw.co>
2023-12-15 11:36:41 +00:00
Guillaume Gomez 552143c875 Simplify src-script.js code 2023-12-15 12:26:09 +01:00
Guillaume Gomez 25216b65f4
Rollup merge of #118909 - Urgau:cleanup-improvement-invalid_ref_casting, r=est31
Some cleanup and improvement for invalid ref casting impl

This PR makes some cleanups and improvements to the `invalid_reference_casting` implementation in preparation for linting on new patterns, while reusing most of the logic.

r? `@est31` (feel free to re-assign)
2023-12-15 11:51:24 +01:00
Guillaume Gomez d3d0287330
Rollup merge of #118863 - Enselic:rustc_mir-build-query-stability, r=michaelwoerister
rustc_mir_build: Enforce `rustc::potential_query_instability` lint

Stop allowing `rustc::potential_query_instability` on all of `rustc_mir_build` and instead allow it on a case-by-case basis if it is safe to do so. In this crate there was only one instance of the lint, and it was safe to allow.

Part of https://github.com/rust-lang/rust/issues/84447 which is E-help-wanted.
2023-12-15 11:51:24 +01:00
Guillaume Gomez f8b92697a1
Rollup merge of #115660 - notriddle:notriddle/sidebar-resize, r=GuillaumeGomez
rustdoc: allow resizing the sidebar / hiding the top bar

Fixes #97306

Preview: http://notriddle.com/rustdoc-html-demo-4/sidebar-resize/std/index.html

![image](https://github.com/rust-lang/rust/assets/1593513/a2f40ea2-0436-4e44-99e8-d160dab2a680)

## Summary

This feature adds:

1. A checkbox to the Settings popover to hide the persistent navigation bar (the sidebar on large viewports and the top bar on small ones).
2. On large viewports, it adds a resize handle to the persistent sidebar. Resizing it into nothing is equivalent to turning off the persistent navigation bar checkbox in Settings.
3. If the navigation bar is hidden, a toolbar button to the left of the search appears. Clicking it brings the navigation bar back.

## Motivation

While "mobile mode" is definitely a good default, it's not the only reason people have wanted to hide the sidebar:

* Some people use tiling window managers, and don't like rustdoc's current breakpoints. Changing the breakpoints might help with that, but there's no perfect solution, because there's a gap between "huge screen" and "smartphone" where reasonable people can disagree about whether it makes sense for the sidebar to be on-screen. https://github.com/rust-lang/rust/issues/97306

* Some people ask for ways to reduce on-screen clutter because it makes it easier to focus. There's not a media query for that (and if there was, privacy-conscious users would turn it off). https://github.com/rust-lang/rust/issues/59829

This feature is designed to avoid these problems. Resizing the sidebar especially helps, because it provides a way to hide the sidebar without adding a new top-level button (which would add clutter), and it provides a way to make rustdoc play nicer in complex, custom screen layouts.

## Guide and Reference-level explanation

On a desktop or laptop with a mouse, resize the sidebar by dragging its right edge.

On any browser, including mobile phones, the sticky top bar or side bar can be hidden from the Settings area (the button with the cog wheel, next to the search bar). When it's hidden, a convenient button will appear on the search bar's left.

## Drawbacks

This adds more JavaScript code to the render blocking area.

## Rationale and alternatives

The most obvious way to allow people to hide the sidebar would have been to let them "manually enter mobile mode." The upside is that it's a feature we already have. The downside is that it's actually really hard to come up with a terse description. Is it:

* A Setting that forces desktop viewers to always have the mobile-style top bar? If so, how do we label it? Should it be visible on mobile, and, if so, does it just not do anything?
* A persistent hide/show sidebar button, present on desktop, just like on mobile? That's clutter that I'd like to avoid.

## Prior art

* The new file browser in GitHub uses a similar divider with a mouse-over indicator
* mdBook and macOS Finder both allow you to resize the sidebar to nothing as a gesture to hide it
* https://www.nngroup.com/articles/drag-drop/

## Future possibilities

https://rust-lang.zulipchat.com/#narrow/stream/266220-rustdoc/topic/Table.20of.20contents proposes a new, second sidebar (a table of contents). How should it fit in with this feature? Should it be resizeable? Hideable? Can it be accessed on mobile?
2023-12-15 11:51:23 +01:00
Guillaume Gomez ec0008a915
Rollup merge of #113091 - GuillaumeGomez:prevent-cfg-merge-reexport, r=rustdoc
Don't merge cfg and doc(cfg) attributes for re-exports

Fixes #112881.

## Explanations

When re-exporting things with different `cfg`s there are two things that can happen:

 * The re-export uses a subset of `cfg`s, this subset is sufficient so that the item will appear exactly with the subset
 * The re-export uses a non-subset of `cfg`s (e.g. like the example I posted just above where the re-export is ungated), if the non-subset `cfg`s are active (e.g. compiling that example on windows) then this will be a compile error as the item doesn't exist to re-export, if the subset `cfg`s are active it behaves like 1.

### Glob re-exports?

**This only applies to non-glob inlined re-exports.** For glob re-exports the item may or may not exist to be re-exported (potentially the `cfg`s on the path up until the glob can be removed, and only `cfg`s on the globbed item itself matter), for non-inlined re-exports see https://github.com/rust-lang/rust/issues/85043.

cc `@Nemo157`
r? `@notriddle`
2023-12-15 11:51:23 +01:00
bors 96df494340 Auto merge of #118961 - notriddle:notriddle/varconst, r=GuillaumeGomez
rustdoc-search: fix a race condition in search index loading

`var` declare it in the global scope, and `const` does not. It needs to be declared in global scope.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/var

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/const

> const declarations do not create properties on [globalThis](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/globalThis) when declared at the top level of a script.

Fixes a regression introduced by https://github.com/rust-lang/rust/pull/118910
2023-12-15 10:50:09 +00:00
Jubilee Young 0e9d400587 Annotate panic! reasons during enum layout
Add some reasons to the panics, and use more exhaustive matches.
2023-12-15 02:21:31 -08:00
bors d253bf61ad Auto merge of #118970 - aliemjay:rollup-or33al2, r=aliemjay
Rollup of 2 pull requests

Successful merges:

 - #118927 (Erase late bound regions from `Instance::fn_sig()` and add a few more details to StableMIR APIs)
 - #118964 (Opportunistically resolve region var in canonicalizer (instead of resolving root var))

r? `@ghost`
`@rustbot` modify labels: rollup
2023-12-15 08:51:00 +00:00
Ali MJ Al-Nasrawy 9a07292ce6
Rollup merge of #118964 - compiler-errors:resolve, r=aliemjay
Opportunistically resolve region var in canonicalizer (instead of resolving root var)

See comment in `compiler/rustc_type_ir/src/infcx.rs`.

The **root** infer region for a given region vid may not actually be nameable from the universe of the original vid. That means that the assertion in the canonicalizer was too strict, since the `EagerResolver` that we use before canonicalizing is doing only as much resolving as it can.

This replaces `resolve_lt_var` and `probe_lt_var` in the `rustc_type_ir` API with `opportunistic_resolve_lt_var`, which acts as you expect it should. I left a FIXME that complains about the inconsistency.

This test is really gnarly, but I have no idea how to minimize it, since it seems to kind of just be coincidental that it triggered this issue. I hope the underlying root cause is easy enough to understand, though.

r? `@lcnr` or `@aliemjay`

Fixes #118950
2023-12-15 10:58:23 +03:00
Ali MJ Al-Nasrawy 578758ae04
Rollup merge of #118927 - celinval:smir-missing-info, r=compiler-errors
Erase late bound regions from `Instance::fn_sig()` and add a few more details to StableMIR APIs

The Instance `fn_sig()` still included a late bound regions which needed a new compiler function in order to be erased. I've also bundled the following small fixes in this PR, let me know if you want me to isolate any of them.

  - Add missing `CoroutineKind::AsyncGen`.
  - Add optional spread argument to function body which is needed to properly analyze compiler shims.
  - Add a utility method to iterate over all locals together with their declaration.
  - Add a method to get the description of `AssertMessage`*.

* For the last one, we could consider eventually calling the internal `AssertKind::description()` to avoid code duplication. However, we still don't have ways to convert `AssertMessage`, `Operand`, `Place` and others, in order to use that. The other downside of using the internal method is that it will panic for some of the variants.

r ? `@ouz-a`
2023-12-15 10:58:23 +03:00
bors cca2bda07e Auto merge of #118966 - matthiaskrgr:rollup-sdvjwy6, r=matthiaskrgr
Rollup of 3 pull requests

Successful merges:

 - #116888 (Add discussion that concurrent access to the environment is unsafe)
 - #118888 (Uplift `TypeAndMut` and `ClosureKind` to `rustc_type_ir`)
 - #118929 (coverage: Tidy up early parts of the instrumentor pass)

r? `@ghost`
`@rustbot` modify labels: rollup
2023-12-15 06:52:44 +00:00
Zalathar 5764ccc5e8 coverage: Use Waker::noop in async tests 2023-12-15 17:17:20 +11:00
Celina G. Val 600438679d Revert signature change for AssertMessage description 2023-12-14 22:04:14 -08:00
Matthias Krüger f90e8ef6b8 Rollup merge of #118888 - compiler-errors:uplift-more-things, r=jackh726
Uplift `TypeAndMut` and `ClosureKind` to `rustc_type_ir`

Uplifts `TypeAndMut` and `ClosureKind`

I know I said I was just going to get rid of `TypeAndMut` (https://github.com/rust-lang/types-team/issues/124) but I think this is much simpler, lol

r? `@jackh726` or `@lcnr`
2023-12-15 06:50:18 +01:00
Matthias Krüger 6659b5ec9f
Rollup merge of #118929 - Zalathar:look-hir, r=cjgillot
coverage: Tidy up early parts of the instrumentor pass

This is extracted from #118237, which needed to be manually rebased anyway.

Unlike that PR, this one only affects the coverage instrumentor, and doesn't attempt to move any code into the MIR builder. That can be left to a future version of #118305, which can still benefit from these improvements.

So this is now mostly a refactoring of some internal parts of the instrumentor.
2023-12-15 06:50:18 +01:00
Matthias Krüger d5af762fe5
Rollup merge of #118888 - compiler-errors:uplift-more-things, r=jackh726
Uplift `TypeAndMut` and `ClosureKind` to `rustc_type_ir`

Uplifts `TypeAndMut` and `ClosureKind`

I know I said I was just going to get rid of `TypeAndMut` (https://github.com/rust-lang/types-team/issues/124) but I think this is much simpler, lol

r? `@jackh726` or `@lcnr`
2023-12-15 06:50:18 +01:00
Matthias Krüger 44fd74aede
Rollup merge of #116888 - tbu-:pr_unsafe_env, r=Amanieu
Add discussion that concurrent access to the environment is unsafe

The bug report #27970 has existed for 8 years, the actual bug dates back to Rust pre-1.0. I documented it since it's in the interest of the user to be aware of it. The note can be removed once #27970 is fixed.
2023-12-15 06:50:17 +01:00
Michael Goulet 146e345d8b Opportunistically resolve region var in canonicalizer 2023-12-15 05:02:37 +00:00
bors 1559dd2dbf Auto merge of #118770 - saethlin:fix-inline-never-uses, r=nnethercote
Fix cases where std accidentally relied on inline(never)

This PR increases the power of `-Zcross-crate-inline-threshold=always` so that it applies through `#[inline(never)]`. Note that though this is called "cross-crate-inlining" in this case especially it is _just_ lazy per-CGU codegen. The MIR inliner and LLVM still respect the attribute as much as they ever have.

Trying to bootstrap with the new `-Zcross-crate-inline-threshold=always` change revealed two bugs:

We have special intrinsics `assert_inhabited`, `assert_zero_valid`, and `assert_mem_uniniitalized_valid` which codegen backends will lower to nothing or a call to `panic_nounwind`.  Since we may not have any call to `panic_nounwind` in MIR but emit one anyway, we need to specially tell `MirUsedCollector` about this situation.

`#[lang = "start"]` is special-cased already so that `MirUsedCollector` will collect it, but then when we make it cross-crate-inlinable it is only assigned to a CGU based on whether `MirUsedCollector` saw a call to it, which of course we didn't.

---

I started looking into this because https://github.com/rust-lang/rust/pull/118683 revealed a case where we were accidentally relying on a function being `#[inline(never)]`, and cranking up cross-crate-inlinability seems like a way to find other situations like that.

r? `@nnethercote` because I don't like what I'm doing to the CGU partitioning code here but I can't come up with something much better
2023-12-15 04:54:14 +00:00
Michael Howell 09c8fd35ac rustdoc-search: fix a race condition in search index loading
`var` declare it in the global scope, and `const` does not.
It needs to be declared in global scope.
2023-12-14 20:08:53 -07:00
bors 604f185fae Auto merge of #118936 - nikic:update-llvm-18, r=cuviper
Update to LLVM 17.0.6

This is a rebase on the final LLVM 17 release.

Includes the RISCV fix requested in https://github.com/rust-lang/llvm-project/pull/157 (and I think this is also the only change in this release that is relevant to rustc).

r? `@cuviper`

Fixes #117902
2023-12-15 02:15:55 +00:00
Celina G. Val c0f1207a12 Address PR comments
- Remove `fn_sig()` from Instance.
- Change return value of `AssertMessage::description` to `Cow<>`.
- Add assert to instance `ty()`.
- Generalize uint / int type creation.
2023-12-14 17:56:33 -08:00
bors 03515c6a22 Auto merge of #118957 - workingjubilee:rollup-2hcwnp3, r=workingjubilee
Rollup of 4 pull requests

Successful merges:

 - #118908 (Add all known `target_feature` configs to check-cfg)
 - #118933 (Cleanup errors handlers even more)
 - #118943 (update `measureme` to 10.1.2 to deduplicate `parking_lot`)
 - #118948 (Use the `Waker::noop` API in tests)

r? `@ghost`
`@rustbot` modify labels: rollup
2023-12-15 00:14:11 +00:00
Daniel Huang f2f9b1d82a
Update c_str.rs 2023-12-14 19:08:36 -05:00
Jubilee 9648c485de
Rollup merge of #118948 - compiler-errors:noop, r=eholk
Use the `Waker::noop` API in tests

Avoids the need to duplicate this code over and over again

r? eholk
2023-12-14 16:07:49 -08:00
Jubilee b62511fd9d
Rollup merge of #118943 - lqd:update-deps2, r=michaelwoerister
update `measureme` to 10.1.2 to deduplicate `parking_lot`

This PR updates `measureme` to the latest release to remove the last duplicates of `parking_lot` 0.11 we had in our dependency tree.

```console
Updating measureme v10.1.1 -> v10.1.2
Removing parking_lot v0.11.2
Removing parking_lot_core v0.8.6
```

Also removes `instant` from the allowed list of dependencies, as it's no longer used.

r? `@michaelwoerister` (Thanks for the release in the first place 🙏)
2023-12-14 16:07:48 -08:00