242702 Commits

Author SHA1 Message Date
Michael Goulet
6a2bd5acd6 Use resolutions(()).effective_visiblities to avoid cycle errors 2024-01-05 14:48:53 +00:00
bors
432fffa8af Auto merge of #118991 - nikic:scalar-pair, r=nagisa
Separate immediate and in-memory ScalarPair representation

Currently, we assume that ScalarPair is always represented using a two-element struct, both as an immediate value and when stored in memory.

This currently works fairly well, but runs into problems with https://github.com/rust-lang/rust/pull/116672, where a ScalarPair involving an i128 type can no longer be represented as a two-element struct in memory. For example, the tuple `(i32, i128)` needs to be represented in-memory as `{ i32, [3 x i32], i128 }` to satisfy alignment requirements. Using `{ i32, i128 }` instead will result in the second element being stored at the wrong offset (prior to LLVM 18).

Resolve this issue by no longer requiring that the immediate and in-memory type for ScalarPair are the same. The in-memory type will now look the same as for normal struct types (and will include padding filler and similar), while the immediate type stays a simple two-element struct type. This also means that booleans in immediate ScalarPair are now represented as i1 rather than i8, just like we do everywhere else.

The core change here is to llvm_type (which now treats ScalarPair as a normal struct) and immediate_llvm_type (which returns the two-element struct that llvm_type used to produce). The rest is fixing things up to no longer assume these are the same. In particular, this switches places that try to get pointers to the ScalarPair elements to use byte-geps instead of struct-geps.
2024-01-05 14:31:56 +00:00
Georg Semmler
91e1af3862
Add a test that emitting diagnostics does not require the crate to use
the corresponding feature.
2024-01-05 15:23:10 +01:00
Georg Semmler
2c3aeea1ba
Replace some usage of #[rustc_on_unimplemented] with
`#[diagnostic::on_unimplemented]`

This commit replaces those `#[rustc_on_unimplemented]` attributes with
their equivalent `#[diagnostic::on_unimplemented]` where this is
supported (So no filter or any extended option)
2024-01-05 15:23:09 +01:00
Georg Semmler
ddfcf86867
Allow emitting diagnostics from the #[diagnostic] namespace without a
nightly feature

(Using this attribute still requires a nightly feature, this just
enables that this feature does not need to be enabled on the child crate
as well)
2024-01-05 15:23:09 +01:00
bors
6bc08a725f Auto merge of #117673 - matthewjasper:thir-unsafeck-stabilization, r=cjgillot
Stabilize THIR unsafeck

- Removes `-Zthir-unsafeck`, stabilizing the behaviour of `-Zthir-unsafeck=on`.
- Removes MIR unsafeck.
- Union patterns are now unsafe unless the field is matched to a wildcard pattern.

Opening for a crater run in case we need a compatibility lint.
2024-01-05 12:34:00 +00:00
Matthew Jasper
44bba5486e Update clippy for hir::Guard removal 2024-01-05 10:56:59 +00:00
Matthew Jasper
1a267e3f40 Restore if let guard temporary scoping difference
Match guards with an if let guard or an if let chain guard should have a
temporary scope of the whole arm. This is to allow ref bindings to
temporaries to borrow check.
2024-01-05 10:56:59 +00:00
Matthew Jasper
a549711f6e Remove thir::Guard
Use Expr instead. Use `ExprKind::Let` to represent if let guards.
2024-01-05 10:56:59 +00:00
Matthew Jasper
407cb24142 Remove hir::Guard
Use Expr instead. Use `ExprKind::Let` to represent if let guards.
2024-01-05 10:56:59 +00:00
Nikita Popov
3cd6cde0be Make test compatible with 32-bit as well 2024-01-05 11:45:57 +01:00
Matthew Jasper
7832ebbd4f Handle context for const patterns correctly 2024-01-05 10:00:59 +00:00
Matthew Jasper
26f48b4cba Stabilize THIR unsafeck 2024-01-05 10:00:59 +00:00
Matthew Jasper
982b49494e Remove revisions for THIR unsafeck
This is to make the diff when stabilizing it easier to review.
2024-01-05 09:30:27 +00:00
bors
8d39ec1825 Auto merge of #118899 - veera-sivarajan:fix-makefile, r=Mark-Simulacrum
fix(tests): remove check for `echo`

fixes: #56222

Removes check for `echo` as it doesn't seem to be used anywhere.
2024-01-05 07:42:03 +00:00
bors
5113ed28ea Auto merge of #118297 - shepmaster:warn-dead-tuple-fields, r=WaffleLapkin
Merge `unused_tuple_struct_fields` into `dead_code`

This implicitly upgrades the lint from `allow` to `warn` and places it into the `unused` lint group.

[Discussion on Zulip](https://rust-lang.zulipchat.com/#narrow/stream/131828-t-compiler/topic/Moving.20.60unused_tuple_struct_fields.60.20from.20allow.20to.20warn)
2024-01-05 04:51:55 +00:00
Nicholas Nethercote
8843223897 Change printing of "--error-format is unstable" errors.
Currently for these two errors we go to the effort of switching to a
standard JSON emitter, for no obvious reason, and unlike any other
errors. This behaviour was added for `pretty-json` in #45737, and then
`human-annotate-rs` copied it some time later when it was added.

This commit changes things to just using the requested emitter, which is
simpler and consistent with other errors.

Old output:
```
$ rustc --error-format pretty-json
{"$message_type":"diagnostic","message":"`--error-format=pretty-json` is unstable","code":null,"level":"error","spans":[],"children":[],"rendered":"error: `--error-format=pretty-json` is unstable\n\n"}

$ rustc --error-format human-annotate-rs
{"$message_type":"diagnostic","message":"`--error-format=human-annotate-rs` is unstable","code":null,"level":"error","spans":[],"children":[],"rendered":"error: `--error-format=human-annotate-rs` is unstable\n\n"}
```

New output:
```
$ rustc --error-format pretty-json
{
  "$message_type": "diagnostic",
  "message": "`--error-format=pretty-json` is unstable",
  "code": null,
  "level": "error",
  "spans": [],
  "children": [],
  "rendered": "error: `--error-format=pretty-json` is unstable\n\n"
}

$ rustc --error-format human-annotate-rs
error: `--error-format=human-annotate-rs` is unstable
```
2024-01-05 14:37:06 +11:00
Nicholas Nethercote
f5a09a9e1d Unbreak tests/ui/lint/use_suggestion_json.rs.
PR #82639 changed UI tests so `-Z unstable-options` aren't passed to UI
tests by default. This completely broke `use_suggestion_json.rs`, which
uses the unstable `--error-format=pretty-json` option. The expected
output went from 400 lines of pretty JSON error messages to a single
JSON error saying "`--error-format=pretty-json` is unstable"!

This commit adds `-Z unstable-options` back and reinstates the old
expected output, with some minor changes to account for shifted spans
and slightly JSON output changes since then.
2024-01-05 14:24:06 +11:00
bors
a59a98024e Auto merge of #118861 - Veykril:r-a-in-tree, r=onur-ozkan
Set the `in-rust-tree` feature for all rust-analyzer{-proc-macro-srv} steps

Some context: This came up in https://rust-lang.zulipchat.com/#narrow/stream/185405-t-compiler.2Frust-analyzer/topic/libraryfying.20match.20checking.3F where `test` and `check` behaved differently for rust-analyzer
r? `@onur-ozkan`
2024-01-05 02:53:45 +00:00
Zalathar
731ba80a6b Allow coverage tests to enable llvm-cov --use-color 2024-01-05 13:42:54 +11:00
Zalathar
9ab8c632ee Extract a split_flags helper in header directive parsing 2024-01-05 13:42:54 +11:00
Zalathar
aa4bf0bbf0 Allow tests to ignore individual test modes
Normally, each test in `tests/coverage` is automatically run in both
`coverage-map` mode and `coverage-run` mode.

This new family of directives allows an individual test to specify that it
should not be run in a particular mode.
2024-01-05 13:42:54 +11:00
Zalathar
f9df1ad4f2 Check for profiler support via a flag, instead of an environment var 2024-01-05 13:42:54 +11:00
Zalathar
514e026853 coverage: Make the remaining fields of CoverageSpan non-public
The struct itself is already non-public, so having public fields doesn't
achieve anything.
2024-01-05 12:53:23 +11:00
Zalathar
cd5084388a coverage: Split out SpanFromMir from CoverageSpan
This draws a clear distinction between the fields/methods that are needed by
initial span extraction and preprocessing, and those that are needed by the
main "refinement" loop.
2024-01-05 12:53:23 +11:00
Zalathar
d4d2f1428c coverage: Hoist the splitting of visible macro invocations 2024-01-05 12:53:23 +11:00
Zalathar
cd3a9760e4 coverage: Hoist the removal of unwanted macro expansion spans 2024-01-05 12:53:23 +11:00
Zalathar
df0df5256b coverage: Overhaul how "visible macros" are determined 2024-01-05 12:53:23 +11:00
Zalathar
506b9f9689 coverage: Avoid early returns from mir_to_initial_sorted_coverage_spans 2024-01-05 12:53:23 +11:00
bors
791a53f380 Auto merge of #117213 - oli-obk:check_item_type_cleanup, r=estebank
Reorder check_item_type diagnostics so they occur next to the corresponding `check_well_formed` diagnostics

The first commit is just a cleanup.

The second commit moves most checks from `check_mod_item_types` into `check_well_formed`, invoking the checks in lockstep per-item instead of iterating over all items twice.
2024-01-05 00:04:08 +00:00
Nicholas Nethercote
453fface11 Add some comments to Emitter.
There are three functions only used for the JSON format.
2024-01-05 10:49:35 +11:00
Nicholas Nethercote
c4d63c7f76 Rename AnnotateSnippetEmitterWriter as AnnotateSnippetEmitter.
For consistency with other `Emitter` impls.
2024-01-05 10:37:44 +11:00
Nicholas Nethercote
cb9abcae79 Rename EmitterWriter as HumanEmitter.
For consistency with other `Emitter` impls, such as `JsonEmitter`,
`SilentEmitter`, `SharedEmitter`, etc.
2024-01-05 10:02:40 +11:00
Tomasz Miąsko
df116ec246 Migrate memory overlap check from validator to lint
The check attempts to identify potential undefined behaviour, rather
than whether MIR is well-formed. It belongs in the lint not validator.
2024-01-04 23:32:22 +01:00
Tomasz Miąsko
a084e063e6 Fix validation and linting of injected MIR
Reevaluate `body.should_skip()` after updating the MIR phase to ensure
that injected MIR is processed correctly.

Update a few custom MIR tests that were ill-formed for the injected
phase.
2024-01-04 23:06:42 +01:00
Tomasz Miąsko
12b92c8a87 Visit only reachable blocks in MIR lint
No functional changes - all checks have been emitted conditionally on
block being rechable already.
2024-01-04 23:04:48 +01:00
Michael Howell
a68ac32de5 Clean up serialization code nits 2024-01-04 15:03:18 -07:00
bors
f688dd684f Auto merge of #119569 - matthiaskrgr:rollup-4packja, r=matthiaskrgr
Rollup of 10 pull requests

Successful merges:

 - #118521 (Enable address sanitizer for MSVC targets using INFERASANLIBS linker flag)
 - #119026 (std::net::bind using -1 for openbsd which in turn sets it to somaxconn.)
 - #119195 (Make named_asm_labels lint not trigger on unicode and trigger on format args)
 - #119204 (macro_rules: Less hacky heuristic for using `tt` metavariable spans)
 - #119362 (Make `derive(Trait)` suggestion more accurate)
 - #119397 (Recover parentheses in range patterns)
 - #119417 (Uplift some miscellaneous coroutine-specific machinery into `check_closure`)
 - #119539 (Fix typos)
 - #119540 (Don't synthesize host effect args inside trait object types)
 - #119555 (Add codegen test for RVO on MaybeUninit)

r? `@ghost`
`@rustbot` modify labels: rollup
2024-01-04 21:44:14 +00:00
bors
4c5ce1f0d5 Auto merge of #119578 - matthiaskrgr:rollup-42yizmx, r=matthiaskrgr
Rollup of 10 pull requests

Successful merges:

 - #117636 (add test for #117626)
 - #118704 (Promote `riscv32{im|imafc}` targets to tier 2)
 - #119184 (Switch from using `//~ERROR` annotations with `--error-format` to `error-pattern`)
 - #119325 (custom mir: make it clear what the return block is)
 - #119391 (Use Result::flatten in catch_with_exit_code)
 - #119431 (Support reg_addr register class in s390x inline assembly)
 - #119475 (Remove libtest's dylib)
 - #119532 (Make offset_of field parsing use metavariable which handles any spacing)
 - #119553 (stop feed vis when cant access for trait item)
 - #119574 (Miri subtree update)

r? `@ghost`
`@rustbot` modify labels: rollup
2024-01-04 19:44:14 +00:00
Vadim Petrochenkov
4bc3552cd8 cstore: Remove unnecessary locking from CrateMetadata 2024-01-04 22:42:35 +03:00
Wim Looman
073ed0e262
Move i586-unknown-netbsd from tier 2 to tier 3 platform support table
It appears it was intended to be tier 3, but was accidentally added to
tier 2.
2024-01-04 20:32:08 +01:00
Guillaume Gomez
5bc7687351 Add regression test for jump to def static method calls 2024-01-04 20:24:16 +01:00
Guillaume Gomez
35ad2ae71c Fix invalid handling for static method calls in jump to definition feature 2024-01-04 20:24:16 +01:00
AngelicosPhosphoros
59c76fb21b Make intrinsics::assume const stable
Closes https://github.com/rust-lang/rust/issues/76972
Blocks https://github.com/rust-lang/rust/pull/119452

Approved in https://github.com/rust-lang/rust/pull/119452#issuecomment-1875741678
2024-01-04 19:14:31 +01:00
Matthias Krüger
657937850b
Rollup merge of #119574 - RalfJung:miri, r=oli-obk
Miri subtree update

r? `@ghost`
2024-01-04 15:34:01 +01:00
Matthias Krüger
ee882d628f
Rollup merge of #119553 - bvanjoi:fix-119463, r=petrochenkov
stop feed vis when cant access for trait item

Fixes #119463

It's not necessary to feed visibility when use a private trait.

r? ``@petrochenkov``
2024-01-04 15:34:01 +01:00
Matthias Krüger
e306cfb115
Rollup merge of #119532 - GKFX:offset-of-parse-expr, r=est31
Make offset_of field parsing use metavariable which handles any spacing

As discussed at and around comments https://github.com/rust-lang/rust/issues/106655#issuecomment-1793485081 and https://github.com/rust-lang/rust/issues/106655#issuecomment-1793774183, the current arguments to offset_of do not accept all the whitespace combinations: `0. 1.1.1` and `0.1.1. 1` are currently treated specially in `tests/ui/offset-of/offset-of-tuple-nested.rs`.

They also do not allow [forwarding individual fields as in](https://play.rust-lang.org/?version=nightly&mode=debug&edition=2021&gist=444cdf0ec02b99e8fd5fd8d8ecb312ca)
```rust
macro_rules! off {
    ($a:expr) => {
        offset_of!(m::S, 0. $a)
    }
}
```

This PR replaces the macro arguments with `($Container:ty, $($fields:expr)+ $(,)?)` which does allow any arrangement of whitespace that I could come up with and the forwarding of fields example above.

This also allows for array indexing in the future, which I think is the last future extension to the syntax suggested in the offset_of RFC.

Tracking issue for offset_of: #106655
``@rustbot`` label F-offset_of

``@est31``
2024-01-04 15:34:00 +01:00
Matthias Krüger
99a8c339f0
Rollup merge of #119475 - saethlin:remove-libtest-dylib, r=cuviper
Remove libtest's dylib

libtest.so is only used by rustdoc, and tests seem to pass locally with this change. I suppose if this is broken, the only way to find out is to make a PR.
2024-01-04 15:34:00 +01:00
Matthias Krüger
12c102ec53
Rollup merge of #119431 - taiki-e:asm-s390x-reg-addr, r=Amanieu
Support reg_addr register class in s390x inline assembly

In s390x, `r0` cannot be used as an address register (it is evaluated as zero in an address context).

Therefore, currently, in assemblies involving memory accesses, `r0` must be [marked as clobbered](1a1155653a/src/arch/s390x.rs (L58)) or [explicitly used to a non-address](1a1155653a/src/arch/s390x.rs (L135)) or explicitly use an address register to prevent `r0` from being allocated to a register for the address.

This patch adds a register class for allocating general-purpose registers, except `r0`, to make it easier to use address registers. (powerpc already has a register class (reg_nonzero) for a similar purpose.)

This is identical to the `a` constraint in LLVM and GCC:

https://llvm.org/docs/LangRef.html#supported-constraint-code-list
> a: A 32, 64, or 128-bit integer address register (excludes R0, which in an address context evaluates as zero).

https://gcc.gnu.org/onlinedocs/gcc/Machine-Constraints.html
> a
> Address register (general purpose register except r0)

cc ``@uweigand``

r? ``@Amanieu``
2024-01-04 15:33:59 +01:00
Matthias Krüger
3d8d10d4ea
Rollup merge of #119391 - DaniPopes:catch-flatten, r=davidtwco
Use Result::flatten in catch_with_exit_code
2024-01-04 15:33:58 +01:00