Commit Graph

10922 Commits

Author SHA1 Message Date
Oneirical
8a6bc13cfe Add set_backtrace_level helper function to run_make_support 2024-06-11 15:39:54 -04:00
bors
3ea5e236ec Auto merge of #125736 - Oneirical:run-make-file-management, r=jieyouxu
run-make-support: add wrapper for `fs` operations

Suggested by #125728.

The point of this wrapper is to stop silent fails caused by forgetting to `unwrap` `fs` functions. However, functions like `fs::read` which return something and get stored in a variable should cause a failure on their own if they are not unwrapped (as the `Result` will be stored in the variable, and something will be done on that `Result` that should have been done to its contents). Is it still pertinent to wrap `fs::read_to_string`, `fs::metadata` and so on?

Closes: https://github.com/rust-lang/rust/issues/125728

try-job: x86_64-msvc
try-job: i686-mingw
2024-06-11 15:50:25 +00:00
Nikita Popov
26fa5c2c30 Make issue-122805.rs big endian compatible
Instead of not generating the function at all on big endian (which
makes the CHECK lines fail), instead use to_le() on big endian,
so that we essentially perform a bswap for both endiannesses.
2024-06-11 16:07:14 +02:00
Oneirical
c84afee898 Implement fs wrapper for run_make_support 2024-06-11 09:53:31 -04:00
Mara Bos
64e56db72a Rename std::panic::PanicInfo to PanicHookInfo. 2024-06-11 15:47:00 +02:00
bors
0c960618b5 Auto merge of #126274 - jieyouxu:rollup-uj93sfm, r=jieyouxu
Rollup of 5 pull requests

Successful merges:

 - #126186 (Migrate `run-make/multiple-emits` to `rmake.rs`)
 - #126236 (Delegation: fix ICE on recursive delegation)
 - #126254 (Remove ignore-cross-compile directive from ui/macros/proc_macro)
 - #126258 (Do not define opaque types when selecting impls)
 - #126265 (interpret: ensure we check bool/char for validity when they are used in a cast)

r? `@ghost`
`@rustbot` modify labels: rollup
2024-06-11 13:38:45 +00:00
许杰友 Jieyou Xu (Joe)
cfd48bdd7e
Rollup merge of #126265 - RalfJung:interpret-cast-validity, r=oli-obk
interpret: ensure we check bool/char for validity when they are used in a cast

In general, `Scalar::to_bits` is a bit dangerous as it bypasses all type information. We should usually prefer matching on the type and acting according to that. So I also refactored `unary_op` handling of integers to do that. The remaining `to_bits` uses are operations that just fundamentally don't care about the sign (and only work on integers).

invalid_char_cast.rs is the key new test, the others already passed before this PR.

r? `@oli-obk`
2024-06-11 14:16:47 +01:00
许杰友 Jieyou Xu (Joe)
2a94a5bc21
Rollup merge of #126258 - oli-obk:recursive_rpit, r=lcnr
Do not define opaque types when selecting impls

fixes #126117

r? `@lcnr` for inconsistency with next solver
2024-06-11 14:16:47 +01:00
许杰友 Jieyou Xu (Joe)
8240d566ab
Rollup merge of #126254 - ferrocene:lw-ignore-cross, r=pietroalbini
Remove ignore-cross-compile directive from ui/macros/proc_macro

All the other proc-macro tests don't have this, presumably this was forgotten when the restriction got lifted as it does test just fine

r? `@pietroalbini`
2024-06-11 14:16:46 +01:00
许杰友 Jieyou Xu (Joe)
279d2b73f1
Rollup merge of #126236 - Bryanskiy:delegation-no-entry-ice-2, r=petrochenkov
Delegation: fix ICE on recursive delegation

fixes https://github.com/rust-lang/rust/issues/124347

r? `@petrochenkov`
2024-06-11 14:16:46 +01:00
许杰友 Jieyou Xu (Joe)
dea5237c0e
Rollup merge of #126186 - GuillaumeGomez:migrate-run-make-multiple-emits, r=jieyouxu
Migrate `run-make/multiple-emits` to `rmake.rs`

Part of https://github.com/rust-lang/rust/issues/121876.

r? `@jieyouxu`
2024-06-11 14:16:45 +01:00
Guillaume Gomez
19a2dfea88 Migrate tests/run-make/prefer-dylib to rmake.rs 2024-06-11 14:11:30 +02:00
Guillaume Gomez
e8b04cc95f Migrate run-make/multiple-emits to rmake.rs 2024-06-11 14:09:38 +02:00
bors
20ba13c38e Auto merge of #125752 - jieyouxu:kaboom, r=Kobzol
run-make: arm command wrappers with drop bombs

This PR is one in a series of cleanups to run-make tests and the run-make-support library.

### Summary

It's easy to forget to actually executed constructed command wrappers, e.g. `rustc().input("foo.rs")` but forget the `run()`, so to help catch these mistakes, we arm command wrappers with drop bombs on construction to force them to be executed by test code.

This PR also removes the `Deref`/`DerefMut` impl for our custom `Command` which derefs to `std::process::Command` because it can cause issues when trying to use a custom command:

```rs
htmldocck().arg().run()
```

fails to compile because the `arg()` is resolved to `std::process::Command::arg`, which returns `&mut std::process::Command` that doesn't have a `run()` command.

This PR also:

- Removes `env_var` on the `impl_common_helper` macro that was wrongly named and is a footgun (no users).
- Bumps the run-make-support library to version `0.1.0`.
- Adds a changelog to the support library.

### Details

Especially for command wrappers like `Rustc`, it's very easy to build up
a command invocation but forget to actually execute it, e.g. by using
`run()`. This commit adds "drop bombs" to command wrappers, which are
armed on command wrapper construction, and only defused if the command
is executed (through `run`, `run_fail`).

If the test writer forgets to execute the command, the drop bomb will
"explode" and panic with an error message. This is so that tests don't
silently pass with constructed-but-not-executed command wrappers.

This PR is best reviewed commit-by-commit.

try-job: x86_64-msvc
2024-06-11 11:29:02 +00:00
Ralf Jung
de4ac0c465 add const eval bool-to-int cast test 2024-06-11 13:28:36 +02:00
许杰友 Jieyou Xu (Joe)
ca95f783c1 tests/run-make: update tests to use new API 2024-06-11 09:14:28 +00:00
bors
6a207f4ff2 Auto merge of #126262 - jieyouxu:rollup-g29lo3c, r=jieyouxu
Rollup of 5 pull requests

Successful merges:

 - #125913 (Spruce up the diagnostics of some early lints)
 - #126234 (Delegation: fix ICE on late diagnostics)
 - #126253 (Simplify assert matchers in `run-make-support`)
 - #126257 (Rename `needs-matching-clang` to `needs-force-clang-based-tests`)
 - #126259 (reachable computation: clarify comments around consts)

r? `@ghost`
`@rustbot` modify labels: rollup
2024-06-11 09:11:33 +00:00
Oli Scherer
03fa9b8073 Also test under next solver 2024-06-11 08:19:19 +00:00
许杰友 Jieyou Xu (Joe)
afce88e2e3
Rollup merge of #126257 - Zalathar:needs-matching-clang, r=jieyouxu
Rename `needs-matching-clang` to `needs-force-clang-based-tests`

This header is much more restrictive than its old name would suggest. As a result, most of the tests that use it don't actually run in any CI jobs.

Mitigation for #126180, though at some point we still need to go back fix the affected tests to actually run.
2024-06-11 09:14:36 +01:00
许杰友 Jieyou Xu (Joe)
76acf2617c
Rollup merge of #126234 - Bryanskiy:delegation-no-entry-ice, r=petrochenkov
Delegation: fix ICE on late diagnostics

fixes https://github.com/rust-lang/rust/issues/124342
2024-06-11 09:14:35 +01:00
许杰友 Jieyou Xu (Joe)
81ff9b5770
Rollup merge of #125913 - fmease:early-lints-spruce-up-some-diags, r=Nadrieril
Spruce up the diagnostics of some early lints

Implement the various "*(note to myself) in a follow-up PR we should turn parts of this message into a subdiagnostic (help msg or even struct sugg)*" drive-by comments I left in #124417 during my review.

For context, before #124417, only a few early lints touched/decorated/customized their diagnostic because the former API made it a bit awkward. Likely because of that, things that should've been subdiagnostics were just crammed into the primary message. This PR rectifies this.
2024-06-11 09:14:34 +01:00
Oli Scherer
6cca6da126 Revert "When checking whether an impl applies, constrain hidden types of opaque types."
This reverts commit 29a630eb72.
2024-06-11 08:08:25 +00:00
Oli Scherer
fe55c0091d Add regression test 2024-06-11 08:08:25 +00:00
Lzu Tao
ab0f87ec66 Fix tests for 32 bits targets 2024-06-11 07:45:16 +00:00
bors
336e6ab3b3 Auto merge of #126139 - compiler-errors:specializes, r=lcnr
Only compute `specializes` query if (min)specialization is enabled in the crate of the specializing impl

Fixes (after backport) https://github.com/rust-lang/rust/issues/125197

### What

https://github.com/rust-lang/rust/pull/122791 makes it so that inductive cycles are no longer hard errors. That means that when we are testing, for example, whether these impls overlap:

```rust
impl PartialEq<Self> for AnyId {
    fn eq(&self, _: &Self) -> bool {
        todo!()
    }
}

impl<T: Identifier> PartialEq<T> for AnyId {
    fn eq(&self, _: &T) -> bool {
        todo!()
    }
}
```

...given...

```rust
pub trait Identifier: Display + 'static {}

impl<T> Identifier for T where T: PartialEq + Display + 'static {}
```

Then we try to see if the second impl holds given `T = AnyId`. That requires `AnyId: Identifier`, which requires that `AnyId: PartialEq`, which is satisfied by these two impl candidates... The `PartialEq<T>` impl is a cycle, and we used to winnow it when we used to treat inductive cycles as errors.

However, now that we don't winnow it, this means that we *now* try calling `candidate_should_be_dropped_in_favor_of`, which tries to check whether one of the impls specializes the other: the `specializes` query. In that query, we currently bail early if the impl is local.

However, in a foreign crate, we try to compute if the two impls specialize each other by doing trait solving. This may itself lead to the same situation where we call `specializes`, which will lead to a query cycle.

### How does this fix the problem

We now record whether specialization is enabled in foreign crates, and extend this early-return behavior to foreign impls too. This means that we can only encounter these cycles if we truly have a specializing impl from a crate with specialization enabled.

-----

r? `@oli-obk` or `@lcnr`
2024-06-11 07:01:18 +00:00
Zalathar
3923b686c7 Rename needs-matching-clang to needs-force-clang-based-tests
This header is much more restrictive than its old name would suggest. As a
result, most of the tests that use it don't actually run in any CI jobs.
2024-06-11 16:45:51 +10:00
Lukas Wirth
b3c2d66712 Remove ignore-cross-compile directive from ui/macros/proc_macro 2024-06-11 08:35:10 +02:00
bors
fa1681c9f6 Auto merge of #125910 - scottmcm:single-use-consts, r=saethlin
Add `SingleUseConsts` mir-opt pass

The goal here is to make a pass that can be run in debug builds to simplify the common case of constants that are used just once -- that doesn't need SSA handling and avoids any potential downside of multi-use constants.  In particular, to simplify the `if T::IS_ZST` pattern that's common in the standard library.

By also handling the case of constants that are *never* actually used this fully replaces the `ConstDebugInfo` pass, since it has all the information needed to do that naturally from the traversal it needs to do anyway.

This is roughly a wash on instructions on its own (a couple regressions, a few improvements https://github.com/rust-lang/rust/pull/125910#issuecomment-2144963361), with a bunch of size improvements.  So I'd like to land it as its own PR, then do follow-ups to take more advantage of it (in the inliner, cg_ssa, etc).

r? `@saethlin`
2024-06-11 02:03:12 +00:00
Matthias Krüger
d762ef1d0c
Rollup merge of #126223 - jieyouxu:rmake-run-in-tmpdir-self-test, r=Kobzol
run-make: add `run_in_tmpdir` self-test

Add a basic sanity test for `run_in_tmpdir` to make sure that files (including read-only files) and directories created inside the "scratch" tmpdir are removed after the closure returns.

r? ghost (while i run a try job)

try-job: x86_64-msvc
2024-06-10 21:12:28 +02:00
Matthias Krüger
f0adebc39d
Rollup merge of #126215 - gurry:125737-bad-err-anon-futs, r=lcnr
Add explanatory note to async block type mismatch error

The async block type mismatch error might leave the user wondering as to why it occurred. The new note should give them the needed context.

Changes this diagnostic:
```
error[E0308]: mismatched types
 --> src/main.rs:5:23
  |
2 |     let a = async { 1 };
  |             ----------- the expected `async` block
3 |     let b = async { 2 };
  |             ----------- the found `async` block
4 |
5 |     let bad = vec![a, b];
  |                       ^ expected `async` block, found a different `async` block
  |
  = note: expected `async` block `{async block@src/main.rs:2:13: 2:24}`
             found `async` block `{async block@src/main.rs:3:13: 3:24}`
```

to this:
```
error[E0308]: mismatched types
 --> src/main.rs:5:23
  |
2 |     let a = async { 1 };
  |             ----------- the expected `async` block
3 |     let b = async { 2 };
  |             ----------- the found `async` block
4 |
5 |     let bad = vec![a, b];
  |                       ^ expected `async` block, found a different `async` block
  |
  = note: expected `async` block `{async block@src/main.rs:2:13: 2:24}`
             found `async` block `{async block@src/main.rs:3:13: 3:24}`
  = note: no two async blocks, even if identical, have the same type
  = help: consider pinning your async block and and casting it to a trait object
```

Fixes #125737
2024-06-10 21:12:27 +02:00
Matthias Krüger
61eb29e958
Rollup merge of #126211 - lolbinarycat:llvm-outputs-rmake, r=jieyouxu
migrate tests/run-make/llvm-outputs to use rmake.rs

part of #121876

<!--
If this PR is related to an unstable feature or an otherwise tracked effort,
please link to the relevant tracking issue here. If you don't know of a related
tracking issue or there are none, feel free to ignore this.

This PR will get automatically assigned to a reviewer. In case you would like
a specific user to review your work, you can assign it to them by using

    r​? <reviewer name>
-->
2024-06-10 21:12:26 +02:00
Matthias Krüger
bcc6fda0ef
Rollup merge of #126115 - gurry:125876-ice-unwrap-probe-many-result, r=compiler-errors
Fix ICE due to `unwrap` in `probe_for_name_many`

Fixes #125876

Now `probe_for_name_many` bubbles up the error returned by `probe_op` instead of calling `unwrap` on it.
2024-06-10 21:12:24 +02:00
Bryanskiy
6f78e6265a Delegation: fix ICE on recursive delegation 2024-06-10 21:27:25 +03:00
Bryanskiy
040791a9c5 Delegation: fix ICE on late diagnostics 2024-06-10 19:25:34 +03:00
Boxy
bfb7757c3c Correct parent for nested anon consts 2024-06-10 14:32:50 +01:00
Gurinder Singh
251d2d0d4d Add explanatory note to async block type mismatch error 2024-06-10 17:14:49 +05:30
Gurinder Singh
e47ea38da8 Make suggestion to change Fn to FnMut work with methods well 2024-06-10 16:28:05 +05:30
许杰友 Jieyou Xu (Joe)
256387b63e run-make: add run_in_tmpdir self-test 2024-06-10 10:46:36 +00:00
binarycat
91f5530b2d migrate tests/run-make/llvm-outputs to use rmake.rs
part of #121876
2024-06-10 05:30:58 -04:00
Scott McMurray
8fbab183d7 Delete ConstDebugInfo pass 2024-06-10 00:06:02 -07:00
Scott McMurray
a4d0fc39ba Add SingleUseConsts mir-opt pass 2024-06-10 00:06:02 -07:00
bors
6d94a87275 Auto merge of #107099 - edward-shen:edward-shen/rustdoc-remap-path-prefix, r=GuillaumeGomez
rustdoc: Add support for --remap-path-prefix

Adds `--remap-path-prefix` as an unstable option. This is implemented to mimic the behavior of `rustc`'s `--remap-path-prefix`.

This flag similarly takes in two paths, a prefix to replace and a replacement string.

This is useful for build tools (e.g. Buck) other than cargo that can run doc tests.

cc: `@dtolnay`
2024-06-10 00:07:18 +00:00
bors
a70b2ae577 Auto merge of #126205 - jieyouxu:rollup-s64z5ng, r=jieyouxu
Rollup of 4 pull requests

Successful merges:

 - #126172 (Weekly `cargo update`)
 - #126176 (rustdoc-search: use lowercase, non-normalized name for type search)
 - #126190 (Autolabel run-make tests, remind to update tracking issue)
 - #126194 (Migrate more things to `WinError`)

r? `@ghost`
`@rustbot` modify labels: rollup
2024-06-09 21:03:04 +00:00
许杰友 Jieyou Xu (Joe)
1fb4805341
Rollup merge of #126176 - notriddle:notriddle/fix-type-name-normalize, r=fmease
rustdoc-search: use lowercase, non-normalized name for type search

The type name ID map has underscores in its names, so the query element should have them, too.

Fixes #125993
2024-06-09 20:54:23 +01:00
Michael Howell
8865b8c639 rustdoc-search: use lowercase, non-normalized name for type search
The type name ID map has underscores in its names, so the query
element should have them, too.
2024-06-09 11:56:52 -07:00
许杰友 Jieyou Xu (Joe)
3720757d21
Rollup merge of #125963 - workingjubilee:remove-hashes-from-codegen-tests, r=Mark-Simulacrum
Remove hard-coded hashes from codegen tests

This removes hard-coded hashes from the codegen and assembly tests. These use FileCheck, which supports eliding part of the pattern being matched, including by capturing it as a pattern parameter for later matching-on. This is much more appropriate than asking contributors to engage with deliberately-opaque identifier schemes.

In order to reduce the likelihood of error, every hash-coded segment I've touched now expects a certain length. This correctly represents these cases, as our hash outputs have a predetermined amount of entropy attached to them.

This is not done for the UI test suite as those are comparatively easy to simply `--bless`, whereas that would be inappropriate for codegen tests. It is also not done for debuginfo tests as those tests do not support such elision in a correct and useful way.
2024-06-09 19:16:21 +01:00
许杰友 Jieyou Xu (Joe)
f000b428bd
Rollup merge of #125041 - scottmcm:gvn-for-from-raw-parts, r=cjgillot
Enable GVN for `AggregateKind::RawPtr`

Looks like I was worried for nothing; this seems like it's much easier than I was originally thinking it would be.
r? `@cjgillot`

This should be useful for `x[..4]`-like things, should those start inlining enough to expose the lengths.
2024-06-09 19:16:19 +01:00
Oneirical
f88c647cda rewrite short-ice in rmake format 2024-06-09 13:49:55 -04:00
Edward Shen
d9f78cb793
rustdoc: Add support for --remap-path-prefix
Adds --remap-path-prefix as an unstable option. This is implemented to
mimic the behavior of rustc's --remap-path-prefix but with minor
adjustments.

This flag similarly takes in two paths, a prefix to replace and a
replacement string.
2024-06-09 10:34:54 -07:00
Lzu Tao
f9edd864df Apply suggestions from code review
Co-authored-by: Nikita Popov <github@npopov.com>
2024-06-09 13:25:12 +00:00
bors
212841e17c Auto merge of #126166 - matthiaskrgr:crsh, r=jieyouxu
tests: add more crashes

r? `@jieyouxu`
2024-06-09 12:26:10 +00:00
bors
4f3a276ff1 Auto merge of #126185 - matthiaskrgr:rollup-72dn1s2, r=matthiaskrgr
Rollup of 5 pull requests

Successful merges:

 - #126137 (tests: Add ui/higher-ranked/trait-bounds/normalize-generic-arg.rs)
 - #126146 (std::unix::process adding few specific freebsd signals to be able to id.)
 - #126155 (Remove empty test suite `tests/run-make-fulldeps`)
 - #126168 (std::unix::os current_exe implementation simplification for haiku.)
 - #126175 (Use --quiet flag when installing pip dependencies)

r? `@ghost`
`@rustbot` modify labels: rollup
2024-06-09 09:37:06 +00:00
Matthias Krüger
246fc285de
Rollup merge of #126155 - Zalathar:run-make-fulldeps, r=onur-ozkan
Remove empty test suite `tests/run-make-fulldeps`

After #109770, there were only a handful of tests left in the run-make-fulldeps suite.

As of #126111, there are no longer *any* run-make-fulldeps tests, so now we can:

- Remove the directory
- Remove related bootstrap/compiletest code
- Remove various other references in CI scripts and documentation.

By removing this suite, we also no longer need to worry about discrepancies between it and ui-fulldeps, and we don't have to worry about porting tests from Makefile to [rmake](https://github.com/rust-lang/rust/issues/121876) (or whether rmake even works with fulldeps).
2024-06-09 10:17:09 +02:00
Matthias Krüger
39fe991dd9
Rollup merge of #126137 - Enselic:normalize-generic-arg, r=compiler-errors
tests: Add ui/higher-ranked/trait-bounds/normalize-generic-arg.rs

This adds a regression test for an ICE "accidentally" fixed by https://github.com/rust-lang/rust/pull/101947 that does not add a test for this particular case.

Closes #107564.

I have confirmed the added test code fails with `nightly-2023-01-09` (and passes with `nightly-2023-01-10` and of course recent `nightly`).
2024-06-09 10:17:08 +02:00
Matthias Krüger
0f8513a51c tests: add more crashes 2024-06-09 10:16:12 +02:00
Lzu Tao
95740fbfed add codegen test for #36010 2024-06-09 07:35:24 +00:00
Lzu Tao
5f527eb562 add codegen test for #68667 2024-06-09 07:35:24 +00:00
Lzu Tao
bf178187c7 add codegen test for #74938 2024-06-09 07:35:24 +00:00
Lzu Tao
2120ea5a91 add assembly test for #83585 2024-06-09 07:35:24 +00:00
Lzu Tao
8bd6c04cfc add codegen test for #93036 2024-06-09 07:35:24 +00:00
Lzu Tao
7d967ffa8d add codegen test for #109328 2024-06-09 07:35:24 +00:00
Lzu Tao
ddb94dbd16 add codegen test for #110797 2024-06-09 07:35:24 +00:00
Lzu Tao
15d07fb2cb Add codegen test for #111508 2024-06-09 07:35:24 +00:00
Lzu Tao
beabc5647b add codegen test for #112509 2024-06-09 07:35:24 +00:00
Lzu Tao
f37c576dbd add codegen test for #113757 2024-06-09 07:35:24 +00:00
Lzu Tao
f3c89f1751 add codegen test for issue-118392, 71096 2024-06-09 07:35:24 +00:00
Lzu Tao
36e1414b10 add codegen test for #120440 2024-06-09 07:35:23 +00:00
bors
b3ca6ee18a Auto merge of #126163 - RalfJung:simd-packed, r=calebzulawski,workingjubilee
simd packed types: remove outdated comment, extend codegen test

It seems like https://github.com/rust-lang/rust/pull/125311 made that check in codegen unnecessary?

r? `@workingjubilee` `@calebzulawski`
2024-06-09 07:28:47 +00:00
Zalathar
5223bf4474 Remove empty test suite tests/run-make-fulldeps 2024-06-09 14:38:37 +10:00
bors
13423befc4 Auto merge of #126087 - jieyouxu:rmake-docs, r=Kobzol
run-make: add some basic docs about the test suite's setup

r? `@Kobzol`
2024-06-09 03:18:49 +00:00
Zalathar
92a56ff291 Remove useless feature gate test for #[feature(extern_prelude)]
This test never actually checked anything useful, so presumably it only existed
to silence the tidy check for feature gate tests, with the real checks being
performed elsewhere (in tests that have since been deleted).
2024-06-09 12:49:49 +10:00
bors
a595f3218e Auto merge of #126150 - RalfJung:offset_of_slice, r=compiler-errors
offset_of: allow (unstably) taking the offset of slice tail fields

Fields of type `[T]` have a statically known offset, so there is no reason to forbid them in `offset_of!`. This PR adds the `offset_of_slice` feature to allow them.

I created a tracking issue: https://github.com/rust-lang/rust/issues/126151.
2024-06-09 00:50:30 +00:00
Ralf Jung
2f2031d2b2 simd packed types: update outdated check, extend codegen test 2024-06-08 21:38:32 +02:00
许杰友 Jieyou Xu (Joe)
e7409d2130 run-make: add some basic docs about the test suite's setup 2024-06-08 18:16:49 +00:00
Jakub Beránek
0a190e8d2d
Migrate runmake tests away from custom commands and command_output 2024-06-08 19:36:31 +02:00
Ralf Jung
eb584a23bf offset_of: allow (unstably) taking the offset of slice tail fields 2024-06-08 18:17:55 +02:00
Martin Nordholts
1293ef735e tests: Add ui/higher-ranked/trait-bounds/normalize-generic-arg.rs 2024-06-08 17:48:21 +02:00
bors
cfdb6175c2 Auto merge of #126097 - Kobzol:runmake-change-cwd, r=jieyouxu
Change how runmake v2 tests are executed

This PR makes execution of v2 runmake tests more sane, by executing each test in a temporary directory by default, rather than running it inside `tests/run-make`. This will have.. a lot of conflicts.

Fixes: https://github.com/rust-lang/rust/issues/126080
Closes https://github.com/rust-lang/rust/issues/125726, because it removes `tmp_dir`, lol.

r? `@jieyouxu`

try-job: x86_64-msvc
2024-06-08 15:25:05 +00:00
Jakub Beránek
b10a404199
Fix windows test 2024-06-08 15:40:43 +02:00
Jakub Beránek
5844b679f3
Remove unnecessary functions and the last mention of TMPDIR from run-make-support 2024-06-08 13:10:55 +02:00
bors
d8fde50745 Auto merge of #126111 - Zalathar:fulldeps-hotplug, r=jieyouxu
Port `tests/run-make-fulldeps/hotplug_codegen_backend` to ui-fulldeps

This is the last remaining run-make-fulldeps test, which means I actually had to leave behind a dummy README file to prevent compiletest from complaining about a missing directory.

(Removing the run-make-fulldeps suite entirely is non-trivial, so I intend to do so in a separate PR after this one.)

---

I wasn't sure about adding a new kind of aux build just for this one test, so I also tried to just port this test from Makefile to [rmake](https://github.com/rust-lang/rust/issues/121876) instead.

But I found that I couldn't get rmake to fully work for a run-make-fulldeps test, which convinced me that getting rid of run-make-fulldeps is worthwhile.

r? `@jieyouxu`
2024-06-08 07:23:17 +00:00
Gurinder Singh
6d87fc8747 Fix ICE due to unwrap in probe_for_name_many 2024-06-08 08:43:08 +05:30
León Orell Valerian Liehr
4bca296f73
Rollup merge of #126065 - bvanjoi:fix-124490, r=petrochenkov
mark binding undetermined if target name exist and not obtained

- Fixes #124490
- Fixes #125013

Following up on #124840, I think handling only `target_bindings` is sufficient.

r? `@petrochenkov`
2024-06-08 04:25:45 +02:00
León Orell Valerian Liehr
1f715eb641
Rollup merge of #126057 - Sunshine40:rustdoc-search-non-english, r=notriddle
Make html rendered by rustdoc allow searching non-English identifier / alias

Fix alias search result showing `undefined` description.

Inspired by https://github.com/rust-lang/mdBook/issues/2393 .

Not sure if it's worth it adding full-text search functionality to rustdoc rendered html.
2024-06-08 04:25:45 +02:00
Michael Goulet
4b188d9d66 Only compute specializes query if specialization is enabled in the crate of the specialized impl 2024-06-07 15:58:50 -04:00
Michael Goulet
1653a2d34a Failing test 2024-06-07 14:59:38 -04:00
Matthias Krüger
b8e28d1426
Rollup merge of #126112 - Kobzol:runmake-source-root, r=jieyouxu
Clean up source root in run-make tests

The name `S` isn't exactly the most descriptive, and we also shouldn't need to pass it when building (actually I think that most of the env. vars that we pass to `cargo` here are probably not really needed).

Related issue: https://github.com/rust-lang/rust/issues/126071

r? ```@jieyouxu```
2024-06-07 20:14:32 +02:00
Matthias Krüger
2e82d7f569
Rollup merge of #126077 - oli-obk:revert_is_mir_available, r=BoxyUwU
Revert "Use the HIR instead of mir_keys for determining whether something will have a MIR body."

This reverts commit e5cba17b84.

turns out SMIR still needs it (https://github.com/model-checking/kani/issues/3218). I'll create a full plan and MCP for what I intended this to be a part of. Maybe my plan is nonsense anyway.
2024-06-07 20:14:31 +02:00
Matthias Krüger
13314df21b
Rollup merge of #125572 - mu001999-contrib:dead/enhance, r=pnkfelix
Detect pub structs never constructed and unused associated constants

<!--
If this PR is related to an unstable feature or an otherwise tracked effort,
please link to the relevant tracking issue here. If you don't know of a related
tracking issue or there are none, feel free to ignore this.

This PR will get automatically assigned to a reviewer. In case you would like
a specific user to review your work, you can assign it to them by using

    r​? <reviewer name>
-->

Lints never constructed public structs.

If we don't provide public methods to construct public structs with private fields, and don't construct them in the local crate. They would be never constructed. So that we can detect such public structs.

---
Update:

Also lints unused associated constants in traits.
2024-06-07 20:14:28 +02:00
Matthias Krüger
6e534c73c3
Rollup merge of #124214 - carbotaniuman:parse_unsafe_attrs, r=michaelwoerister
Parse unsafe attributes

Initial parse implementation for #123757

This is the initial work to parse unsafe attributes, which is represented as an extra `unsafety` field in `MetaItem` and `AttrItem`. There's two areas in the code where it appears that parsing is done manually and not using the parser stuff, and I'm not sure how I'm supposed to thread the change there.
2024-06-07 20:14:28 +02:00
bohan
93feaa6685 mark binding undetermined if target name exist and not obtained 2024-06-07 21:23:56 +08:00
Oli Scherer
9461852363 Add regression test 2024-06-07 13:22:44 +00:00
Zalathar
7c9b469895 Port tests/run-make-fulldeps/hotplug_codegen_backend to ui-fulldeps 2024-06-07 22:28:00 +10:00
Jakub Beránek
c9cb3280f3
Address review comments 2024-06-07 14:07:02 +02:00
Jakub Beránek
d86c981908
Remove all usages of tmp_dir from tests 2024-06-07 11:12:24 +02:00
Jakub Beránek
7ebcc37d65
Fix bare-outfile test 2024-06-07 11:12:04 +02:00
Jakub Beránek
3f20c721ce
Fix mixing-formats run-make test 2024-06-07 11:12:04 +02:00
bors
1be24d70ce Auto merge of #125918 - oli-obk:const_block_ice, r=compiler-errors
Revert: create const block bodies in typeck via query feeding

as per the discussion in https://github.com/rust-lang/rust/pull/125806#discussion_r1622563948

It was a mistake to try to shoehorn const blocks and some specific anon consts into the same box and feed them during typeck. It turned out not simplifying anything (my hope was that we could feed `type_of` to start avoiding the huge HIR matcher, but that didn't work out), but instead making a few things more fragile.

reverts the const-block-specific parts of https://github.com/rust-lang/rust/pull/124650

`@bors` rollup=never had a small perf impact previously

fixes https://github.com/rust-lang/rust/issues/125846

r? `@compiler-errors`
2024-06-07 09:08:59 +00:00
Oli Scherer
321d69d195 Fix codegen test 2024-06-07 08:50:18 +00:00
Oli Scherer
bbcd8794d0 Add regression test 2024-06-07 08:33:58 +00:00
Oli Scherer
cbee17d502 Revert "Create const block DefIds in typeck instead of ast lowering"
This reverts commit ddc5f9b6c1.
2024-06-07 08:33:58 +00:00
Jakub Beránek
7eff2d9b22
Do not pass source root when building run-make tests 2024-06-07 09:20:25 +02:00
Zalathar
58ba77f4aa compiletest: Don't pass --out-dir if the compile flags include -o 2024-06-07 15:55:36 +10:00
Jubilee
b1ab8d59f4
Rollup merge of #126101 - lqd:revert-124099, r=wesleywiser
Revert "Disallow ambiguous attributes on expressions" on nightly

As discussed in [today's t-compiler meeting](https://rust-lang.zulipchat.com/#narrow/stream/238009-t-compiler.2Fmeetings/topic/.5Bweekly.5D.202024-06-06/near/443079505), this reverts PR #124099 to fix P-critical beta regressions #125199.

r? ``@wesleywiser``

Opening as draft so that ``@wesleywiser`` and ``@apiraino,`` you can tell me whether you wanted:
1. a `beta-accepted` revert of #124099 on nightly (this PR)? That will need to be backported to beta (even though #126093 may be the last of those)
2. a revert of #124099 on beta?
3. all of the above?

I also opened #126102, another draft PR to revert #124099 on beta, should you choose options 2 or 3.
2024-06-06 21:10:11 -07:00
Jubilee
2acb24c462
Rollup merge of #126098 - Kobzol:remove-same-lib-runmake-test, r=jieyouxu
Remove `same-lib-two-locations-no-panic` run-make test

This test doesn't really make any sense anymore, it became broken a long time ago.

r? ``@jieyouxu``
2024-06-06 21:10:10 -07:00
Jubilee
6a42df7517
Rollup merge of #126040 - Urgau:unreachable_pub-fields-less, r=petrochenkov
Don't warn on fields in the `unreachable_pub` lint

This PR restrict the `unreachable_pub` lint by not linting on `pub` fields of `pub(restricted)` structs and unions. This is done because that can quickly clutter the code for an uncertain value, in particular since the "real" visibility is defined by the parent (the struct it-self).

This is meant to address one of the last concern of the `unreachable_pub` lint.

r? ``@petrochenkov``
2024-06-06 21:10:10 -07:00
Sunshine
ceaa42b817 Update tests 2024-06-07 11:55:52 +08:00
carbotaniuman
b82c524996 Add double unsafe test 2024-06-06 20:27:25 -05:00
carbotaniuman
230b58febf Error on unsafe on non-unsafe attribute 2024-06-06 20:26:28 -05:00
carbotaniuman
48851d9adb Add tests 2024-06-06 20:26:28 -05:00
carbotaniuman
c4de986afa Disallow unsafe in derive 2024-06-06 20:26:27 -05:00
carbotaniuman
67f5dd1ef1 Parse unsafe attributes 2024-06-06 20:26:27 -05:00
bors
76e7a0849c Auto merge of #126104 - workingjubilee:rollup-t1ac2ld, r=workingjubilee
Rollup of 12 pull requests

Successful merges:

 - #125220 (Repair several `riscv64gc-unknown-linux-gnu` codegen tests)
 - #126033 (CI: fix publishing of toolstate history)
 - #126034 (Clarify our tier 1 Windows Server support)
 - #126035 (Some minor query system cleanups)
 - #126051 (Clarify an `x fmt` error.)
 - #126059 (Raise `DEFAULT_MIN_STACK_SIZE` to at least 64KiB)
 - #126064 (Migrate `run-make/manual-crate-name` to `rmake.rs`)
 - #126072 (compiletest: Allow multiple `//@ run-flags:` headers)
 - #126073 (Port `tests/run-make-fulldeps/obtain-borrowck` to ui-fulldeps)
 - #126081 (Do not use relative paths to Rust source root in run-make tests)
 - #126086 (use windows compatible executable name for libcxx-version)
 - #126096 ([RFC-2011] Allow `core_intrinsics` when activated)

r? `@ghost`
`@rustbot` modify labels: rollup
2024-06-06 22:27:56 +00:00
Sunshine
f9f51839e5 Tidying 2024-06-07 06:09:30 +08:00
Sunshine
dd5103bb68 Add test for PR #126057 2024-06-07 05:49:46 +08:00
Jubilee
af229f5e00
Rollup merge of #126081 - Kobzol:run-make-relative-paths, r=jieyouxu
Do not use relative paths to Rust source root in run-make tests

Pre-requisite for https://github.com/rust-lang/rust/issues/126080.

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

r? `@jieyouxu`
2024-06-06 14:46:24 -07:00
Jubilee
30bb51fd06
Rollup merge of #126073 - Zalathar:fulldeps-borrowck, r=jieyouxu
Port `tests/run-make-fulldeps/obtain-borrowck` to ui-fulldeps

Thanks to `{{sysroot-base}}` from #126008, this was also pretty straightforward to port over.
2024-06-06 14:46:24 -07:00
Jubilee
2c1e71bac5
Rollup merge of #126064 - GuillaumeGomez:migrate-run-make-manual-crate-name, r=jieyouxu
Migrate `run-make/manual-crate-name` to `rmake.rs`

Part of https://github.com/rust-lang/rust/issues/121876.

r? ``@jieyouxu``
2024-06-06 14:46:23 -07:00
Jubilee
aa4cffc012
Rollup merge of #125220 - ferrocene:hoverbear/repair-riscv64-codegen-tests, r=erikdesjardins,workingjubilee
Repair several `riscv64gc-unknown-linux-gnu` codegen tests

Together with joshua.zivkovic@codethink.co.uk, we've been starting to explore improving the state of the `riscv64gc-unknown-linux-gnu` target. Additionally, I'm looking to add support for this platform in [Ferrocene](https://github.com/ferrocene/ferrocene) ([Related PR](https://github.com/ferrocene/ferrocene/pull/618)).

While running the test suite, we noted several tests were failing.

It appears that several of the riscv64gc-unknown-linux-gnu codegen tests have not been updated in some time and seem to have experienced a small amount of bitrot.

After speaking with `@workingjubilee` (as I have little expertise in LLVM codegen) I believe these changes to be correct.

### `tests/codegen/riscv-abi/call-llvm-intrinsics.rs`

I believe this change does not alter what the test is testing and is harmless.

### `tests/codegen/riscv-abi/riscv64-lp64d-abi.rs`

The changes largely mirrors those from loongarch64:

550d1b4fb6/tests/codegen/loongarch-abi/loongarch64-lp64d-abi.rs (L13-L15)

550d1b4fb6/tests/codegen/loongarch-abi/loongarch64-lp64d-abi.rs (L153-L155)

550d1b4fb6/tests/codegen/loongarch-abi/loongarch64-lp64d-abi.rs (L259-L261)

550d1b4fb6/tests/codegen/loongarch-abi/loongarch64-lp64d-abi.rs (L263-L267)

### `tests/codegen/riscv-abi/riscv64-lp64f-lp64d-abi.rs`

The changes largely mirror that from loongarch64 or llvm:

550d1b4fb6/tests/codegen/loongarch-abi/loongarch64-lp64d-abi.rs (L13-L26)

5399a24c66/clang/test/CodeGen/RISCV/riscv64-abi.c (L612-L617)

### `tests/ui/debuginfo/debuginfo-emit-llvm-ir-and-split-debuginfo.rs`

The test is ignored since `-Csplit-debuginfo=unpacked` is not supported on this platform. Context can be found in #120518.

## Reproducing the failures

Using a `config.toml` with the following:

```toml
# ...

target = [
   # ...
   "riscv64gc-unknown-linux-gnu",
]
```

> [!NOTE]
> You may need to install a RICV-V toolchain! We get ours from [here](https://www.embecosm.com/resources/tool-chain-downloads/#riscv-linux).
>
> If you are using an old (20.04) Ubuntu container the compiler in the repositories (`gcc-riscv64-linux-gnu`) won't work!

Run the following test suite:

```bash
./x.py test tests/codegen
```

<details>

<summary>Expected output</summary>

```
ana@Autonoma:~/git/rust-lang/rust$ ./x.py test tests/codegen
Building bootstrap
    Finished `dev` profile [unoptimized] target(s) in 0.03s
WARNING: The `change-id` is missing in the `config.toml`. This means that you will not be able to track the major changes made to the bootstrap configurations.
NOTE: to silence this warning, add `change-id = 124501` at the top of `config.toml`
Building stage0 library artifacts (x86_64-unknown-linux-gnu)
    Finished `release` profile [optimized] target(s) in 0.11s
Building compiler artifacts (stage0 -> stage1, x86_64-unknown-linux-gnu)
    Finished `release` profile [optimized] target(s) in 0.18s
Creating a sysroot for stage1 compiler (use `rustup toolchain link 'name' build/host/stage1`)
Building stage1 library artifacts (x86_64-unknown-linux-gnu)
    Finished `release` profile [optimized] target(s) in 0.11s
Building stage0 tool compiletest (x86_64-unknown-linux-gnu)
    Finished `release` profile [optimized] target(s) in 0.11s
Testing stage1 compiletest suite=codegen mode=codegen (x86_64-unknown-linux-gnu)

running 652 tests
iii......ii...iiiiiii...........ii..iii....i......i......i......iii...iiiii..i..i...i...  88/652
.............i............iii..iiii.....................i............................... 176/652
iiiiiii.............iiiiiiiii.iii....i.................i....................i...ii....i. 264/652
..i........i.........i..i........iii.........i............ii................ii..i....... 352/652
...............i...i....ii.i.....i......................ii.ii...iiiiiiiiiiiiiiiiiiiiiiii 440/652
iii....................iiiiiiiiiiiiiiii.........................iii.i..........i........ 528/652
...i...ii...........i...ii.i..i..........i..............................ii.....ii.i..ii. 616/652
.ii.................................

test result: ok. 498 passed; 0 failed; 154 ignored; 0 measured; 0 filtered out; finished in 4.76s

Building stage1 library artifacts (x86_64-unknown-linux-gnu -> riscv64gc-unknown-linux-gnu)
    Finished `release` profile [optimized] target(s) in 0.10s
Testing stage1 compiletest suite=codegen mode=codegen (x86_64-unknown-linux-gnu -> riscv64gc-unknown-linux-gnu)

running 652 tests
iii......ii..iiiiiii.....i..i..i.i...i........i..i.......i......iii...iiiii..i.i....i...  88/652
.............i............iii..iiii....................i...............................i 176/652
iiiiii..............iiiiiiiii.iii.....i................i..................i.....ii....i. 264/652
..i........i..........i.i........iii..........i...........ii................ii..i....... 352/652
...............i...i....ii.i.....i......................i.......iii.iiiiiiiiiiiiiiiiiiii 440/652
iiii...................iiiiiiiiiiiiiiii................
[codegen] tests/codegen/riscv-abi/call-llvm-intrinsics.rs ... F
.....
[codegen] tests/codegen/riscv-abi/riscv64-lp64f-lp64d-abi.rs ... F
..iii.i.
[codegen] tests/codegen/riscv-abi/riscv64-lp64d-abi.rs ... F
........i........ 528/652
...i...ii...........i...ii..i.i..........i..............................ii.....ii.i..ii. 616/652
.ii.................................

failures:

---- [codegen] tests/codegen/riscv-abi/call-llvm-intrinsics.rs stdout ----

error: verification with 'FileCheck' failed
status: exit status: 1
command: "/home/ana/git/rust-lang/rust/build/x86_64-unknown-linux-gnu/llvm/build/bin/FileCheck" "--input-file" "/home/ana/git/rust-lang/rust/build/x86_64-unknown-linux-gnu/test/codegen/riscv-abi/call-llvm-intrinsics/call-llvm-intrinsics.ll" "/home/ana/git/rust-lang/rust/tests/codegen/riscv-abi/call-llvm-intrinsics.rs" "--check-prefix=CHECK" "--check-prefix" "NONMSVC" "--allow-unused-prefixes" "--dump-input-context" "100"
stdout: none
--- stderr -------------------------------
/home/ana/git/rust-lang/rust/tests/codegen/riscv-abi/call-llvm-intrinsics.rs:26:12: error: CHECK: expected string not found in input
 // CHECK: store float 4.000000e+00, float* %{{.}}, align 4
           ^
/home/ana/git/rust-lang/rust/build/x86_64-unknown-linux-gnu/test/codegen/riscv-abi/call-llvm-intrinsics/call-llvm-intrinsics.ll:1:1: note: scanning from here
; ModuleID = 'call_llvm_intrinsics.b4a95fd5831b1bb7-cgu.0'
^
/home/ana/git/rust-lang/rust/build/x86_64-unknown-linux-gnu/test/codegen/riscv-abi/call-llvm-intrinsics/call-llvm-intrinsics.ll:53:2: note: possible intended match here
 store float 4.000000e+00, ptr %3, align 4
 ^

Input file: /home/ana/git/rust-lang/rust/build/x86_64-unknown-linux-gnu/test/codegen/riscv-abi/call-llvm-intrinsics/call-llvm-intrinsics.ll
Check file: /home/ana/git/rust-lang/rust/tests/codegen/riscv-abi/call-llvm-intrinsics.rs

-dump-input=help explains the following input dump.

Input was:
<<<<<<
            1: ; ModuleID = 'call_llvm_intrinsics.b4a95fd5831b1bb7-cgu.0'
check:26'0     X~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ error: no match found
            2: source_filename = "call_llvm_intrinsics.b4a95fd5831b1bb7-cgu.0"
check:26'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
            3: target datalayout = "e-m:e-p:64:64-i64:64-i128:128-n32:64-S128"
check:26'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
            4: target triple = "riscv64-unknown-linux-gnu"
check:26'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
            5:
check:26'0     ~
            6: `@alloc_cebd5a1664be1c73eee4a1aab7937c96` = private unnamed_addr constant <{ [2 x i8] }> <{ [2 x i8] c"A\0A" }>, align 1
check:26'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
            7: `@alloc_bddb4fe6d67b5a5a93d73a63d68b4b9e` = private unnamed_addr constant <{ ptr, [8 x i8] }> <{ ptr `@alloc_cebd5a1664be1c73eee4a1aab7937c96,` [8 x i8] c"\02\00\00\00\00\00\00\00" }>, align 8
check:26'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
            8: `@0` = private unnamed_addr constant <{ [8 x i8], [8 x i8] }> <{ [8 x i8] zeroinitializer, [8 x i8] undef }>, align 8
check:26'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
            9:
check:26'0     ~
           10: ; core::ptr::drop_in_place<call_llvm_intrinsics::A>
check:26'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           11: ; Function Attrs: uwtable
check:26'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~
           12: define internal void `@"_ZN4core3ptr44drop_in_place$LT$call_llvm_intrinsics..A$GT$17hf11b50bd9b9c5359E"(ptr` noalias noundef nonnull align 1 %_1) unnamed_addr #0 {
check:26'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           13: start:
check:26'0     ~~~~~~~
           14: ; call <call_llvm_intrinsics::A as core::ops::drop::Drop>::drop
check:26'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           15:  call void `@"_ZN65_$LT$call_llvm_intrinsics..A$u20$as$u20$core..ops..drop..Drop$GT$4drop17hc84a7f61b5f719bdE"(ptr` noalias noundef nonnull align 1 %_1)
check:26'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           16:  ret void
check:26'0     ~~~~~~~~~~
           17: }
check:26'0     ~~
           18:
check:26'0     ~
           19: ; <call_llvm_intrinsics::A as core::ops::drop::Drop>::drop
check:26'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           20: ; Function Attrs: uwtable
check:26'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~
           21: define void `@"_ZN65_$LT$call_llvm_intrinsics..A$u20$as$u20$core..ops..drop..Drop$GT$4drop17hc84a7f61b5f719bdE"(ptr` noalias noundef nonnull align 1 %self) unnamed_addr #0 {
check:26'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           22: start:
check:26'0     ~~~~~~~
           23:  %_3 = alloca [48 x i8], align 8
check:26'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           24:  call void `@llvm.lifetime.start.p0(i64` 48, ptr %_3)
check:26'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           25:  store ptr `@alloc_bddb4fe6d67b5a5a93d73a63d68b4b9e,` ptr %_3, align 8
check:26'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           26:  %0 = getelementptr inbounds i8, ptr %_3, i64 8
check:26'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           27:  store i64 1, ptr %0, align 8
check:26'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           28:  %1 = load ptr, ptr `@0,` align 8, !align !4, !noundef !5
check:26'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           29:  %2 = load i64, ptr getelementptr inbounds (i8, ptr `@0,` i64 8), align 8
check:26'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           30:  %3 = getelementptr inbounds i8, ptr %_3, i64 32
check:26'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           31:  store ptr %1, ptr %3, align 8
check:26'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           32:  %4 = getelementptr inbounds i8, ptr %3, i64 8
check:26'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           33:  store i64 %2, ptr %4, align 8
check:26'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           34:  %5 = getelementptr inbounds i8, ptr %_3, i64 16
check:26'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           35:  store ptr inttoptr (i64 8 to ptr), ptr %5, align 8
check:26'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           36:  %6 = getelementptr inbounds i8, ptr %5, i64 8
check:26'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           37:  store i64 0, ptr %6, align 8
check:26'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           38: ; call std::io::stdio::_print
check:26'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           39:  call void `@_ZN3std2io5stdio6_print17h38b16d890daf9d05E(ptr` noalias nocapture noundef align 8 dereferenceable(48) %_3)
check:26'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           40:  call void `@llvm.lifetime.end.p0(i64` 48, ptr %_3)
check:26'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           41:  ret void
check:26'0     ~~~~~~~~~~
           42: }
check:26'0     ~~
           43:
check:26'0     ~
           44: ; call_llvm_intrinsics::do_call
check:26'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           45: ; Function Attrs: uwtable
check:26'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~
           46: define void `@_ZN20call_llvm_intrinsics7do_call17h1d78694c55381316E()` unnamed_addr #0 {
check:26'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           47: start:
check:26'0     ~~~~~~~
           48:  %0 = alloca [4 x i8], align 4
check:26'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           49:  %1 = alloca [4 x i8], align 4
check:26'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           50:  %2 = alloca [4 x i8], align 4
check:26'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           51:  %3 = alloca [4 x i8], align 4
check:26'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           52:  %_1 = alloca [0 x i8], align 1
check:26'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           53:  store float 4.000000e+00, ptr %3, align 4
check:26'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
check:26'1      ?                                          possible intended match
           54:  call void `@llvm.lifetime.start.p0(i64` 4, ptr %2)
check:26'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           55:  call void `@llvm.memcpy.p0.p0.i64(ptr` align 4 %2, ptr align 4 %3, i64 4, i1 false)
check:26'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           56:  %4 = load float, ptr %2, align 4
check:26'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           57:  call void `@llvm.lifetime.end.p0(i64` 4, ptr %2)
check:26'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           58:  %5 = call float `@llvm.sqrt.f32(float` %4) #4
check:26'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           59:  call void `@llvm.lifetime.start.p0(i64` 4, ptr %1)
check:26'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           60:  call void `@llvm.lifetime.start.p0(i64` 4, ptr %0)
check:26'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           61:  store float %5, ptr %0, align 4
check:26'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           62:  call void `@llvm.memcpy.p0.p0.i64(ptr` align 4 %1, ptr align 4 %0, i64 4, i1 false)
check:26'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           63:  call void `@llvm.lifetime.end.p0(i64` 4, ptr %0)
check:26'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           64:  %_2 = load float, ptr %1, align 4, !noundef !5
check:26'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           65:  call void `@llvm.lifetime.end.p0(i64` 4, ptr %1)
check:26'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           66: ; call core::ptr::drop_in_place<call_llvm_intrinsics::A>
check:26'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           67:  call void `@"_ZN4core3ptr44drop_in_place$LT$call_llvm_intrinsics..A$GT$17hf11b50bd9b9c5359E"(ptr` noalias noundef nonnull align 1 %_1)
check:26'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           68:  ret void
check:26'0     ~~~~~~~~~~
           69: }
check:26'0     ~~
           70:
check:26'0     ~
           71: ; std::io::stdio::_print
check:26'0     ~~~~~~~~~~~~~~~~~~~~~~~~~
           72: ; Function Attrs: uwtable
check:26'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~
           73: declare void `@_ZN3std2io5stdio6_print17h38b16d890daf9d05E(ptr` noalias nocapture noundef align 8 dereferenceable(48)) unnamed_addr #0
check:26'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           74:
check:26'0     ~
           75: ; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite)
check:26'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           76: declare void `@llvm.memcpy.p0.p0.i64(ptr` noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #1
check:26'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           77:
check:26'0     ~
           78: ; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
check:26'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           79: declare float `@llvm.sqrt.f32(float)` unnamed_addr #2
check:26'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           80:
check:26'0     ~
           81: ; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
check:26'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           82: declare void `@llvm.lifetime.start.p0(i64` immarg, ptr nocapture) #3
check:26'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           83:
check:26'0     ~
           84: ; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
check:26'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           85: declare void `@llvm.lifetime.end.p0(i64` immarg, ptr nocapture) #3
check:26'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           86:
check:26'0     ~
           87: attributes #0 = { uwtable "target-cpu"="generic-rv64" "target-features"="+m,+a,+f,+d,+c" }
check:26'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           88: attributes #1 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
check:26'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           89: attributes #2 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
check:26'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           90: attributes #3 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
check:26'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           91: attributes #4 = { nounwind }
check:26'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           92:
check:26'0     ~
           93: !llvm.module.flags = !{!0, !1, !2}
check:26'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           94: !llvm.ident = !{!3}
check:26'0     ~~~~~~~~~~~~~~~~~~~~
           95:
check:26'0     ~
           96: !0 = !{i32 8, !"PIC Level", i32 2}
check:26'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           97: !1 = !{i32 1, !"Code Model", i32 3}
check:26'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           98: !2 = !{i32 1, !"target-abi", !"lp64d"}
check:26'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           99: !3 = !{!"rustc version 1.80.0-dev"}
check:26'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          100: !4 = !{i64 8}
check:26'0     ~~~~~~~~~~~~~~
          101: !5 = !{}
check:26'0     ~~~~~~~~~
>>>>>>
------------------------------------------

---- [codegen] tests/codegen/riscv-abi/riscv64-lp64f-lp64d-abi.rs stdout ----

error: verification with 'FileCheck' failed
status: exit status: 1
command: "/home/ana/git/rust-lang/rust/build/x86_64-unknown-linux-gnu/llvm/build/bin/FileCheck" "--input-file" "/home/ana/git/rust-lang/rust/build/x86_64-unknown-linux-gnu/test/codegen/riscv-abi/riscv64-lp64f-lp64d-abi/riscv64-lp64f-lp64d-abi.ll" "/home/ana/git/rust-lang/rust/tests/codegen/riscv-abi/riscv64-lp64f-lp64d-abi.rs" "--check-prefix=CHECK" "--check-prefix" "NONMSVC" "--allow-unused-prefixes" "--dump-input-context" "100"
stdout: none
--- stderr -------------------------------
/home/ana/git/rust-lang/rust/tests/codegen/riscv-abi/riscv64-lp64f-lp64d-abi.rs:7:11: error: CHECK: expected string not found in input
// CHECK: define void `@f_fpr_tracking(float` %0, float %1, float %2, float %3, float %4, float %5, float %6, float %7, i8 zeroext %i)
          ^
/home/ana/git/rust-lang/rust/build/x86_64-unknown-linux-gnu/test/codegen/riscv-abi/riscv64-lp64f-lp64d-abi/riscv64-lp64f-lp64d-abi.ll:1:1: note: scanning from here
; ModuleID = 'riscv64_lp64f_lp64d_abi.ae8fa95bac1a0604-cgu.0'
^
/home/ana/git/rust-lang/rust/build/x86_64-unknown-linux-gnu/test/codegen/riscv-abi/riscv64-lp64f-lp64d-abi/riscv64-lp64f-lp64d-abi.ll:9:1: note: possible intended match here
define void `@f_fpr_tracking(float` %0, float %1, float %2, float %3, float %4, float %5, float %6, float %7, i8 noundef zeroext %i) unnamed_addr #0 {
^

Input file: /home/ana/git/rust-lang/rust/build/x86_64-unknown-linux-gnu/test/codegen/riscv-abi/riscv64-lp64f-lp64d-abi/riscv64-lp64f-lp64d-abi.ll
Check file: /home/ana/git/rust-lang/rust/tests/codegen/riscv-abi/riscv64-lp64f-lp64d-abi.rs

-dump-input=help explains the following input dump.

Input was:
<<<<<<
           1: ; ModuleID = 'riscv64_lp64f_lp64d_abi.ae8fa95bac1a0604-cgu.0'
check:7'0     X~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ error: no match found
           2: source_filename = "riscv64_lp64f_lp64d_abi.ae8fa95bac1a0604-cgu.0"
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           3: target datalayout = "e-m:e-p:64:64-i64:64-i128:128-n32:64-S128"
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           4: target triple = "riscv64-unknown-linux-gnu"
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           5:
check:7'0     ~
           6: %Tricky1 = type { [1 x float] }
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           7:
check:7'0     ~
           8: ; Function Attrs: uwtable
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~
           9: define void `@f_fpr_tracking(float` %0, float %1, float %2, float %3, float %4, float %5, float %6, float %7, i8 noundef zeroext %i) unnamed_addr #0 {
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
check:7'1     ?                                                                                                                                                     possible intended match
          10: start:
check:7'0     ~~~~~~~
          11:  %8 = alloca [4 x i8], align 4
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          12:  %h = alloca [4 x i8], align 4
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          13:  %9 = alloca [4 x i8], align 4
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          14:  %g = alloca [4 x i8], align 4
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          15:  %10 = alloca [4 x i8], align 4
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          16:  %f = alloca [4 x i8], align 4
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          17:  %11 = alloca [4 x i8], align 4
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          18:  %e = alloca [4 x i8], align 4
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          19:  %12 = alloca [4 x i8], align 4
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          20:  %d = alloca [4 x i8], align 4
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          21:  %13 = alloca [4 x i8], align 4
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          22:  %c = alloca [4 x i8], align 4
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          23:  %14 = alloca [4 x i8], align 4
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          24:  %b = alloca [4 x i8], align 4
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          25:  %15 = alloca [4 x i8], align 4
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          26:  %a = alloca [4 x i8], align 4
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          27:  call void `@llvm.lifetime.start.p0(i64` 4, ptr %15)
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          28:  store float %0, ptr %15, align 4
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          29:  call void `@llvm.memcpy.p0.p0.i64(ptr` align 4 %a, ptr align 4 %15, i64 4, i1 false)
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          30:  call void `@llvm.lifetime.end.p0(i64` 4, ptr %15)
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          31:  call void `@llvm.lifetime.start.p0(i64` 4, ptr %14)
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          32:  store float %1, ptr %14, align 4
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          33:  call void `@llvm.memcpy.p0.p0.i64(ptr` align 4 %b, ptr align 4 %14, i64 4, i1 false)
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          34:  call void `@llvm.lifetime.end.p0(i64` 4, ptr %14)
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          35:  call void `@llvm.lifetime.start.p0(i64` 4, ptr %13)
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          36:  store float %2, ptr %13, align 4
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          37:  call void `@llvm.memcpy.p0.p0.i64(ptr` align 4 %c, ptr align 4 %13, i64 4, i1 false)
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          38:  call void `@llvm.lifetime.end.p0(i64` 4, ptr %13)
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          39:  call void `@llvm.lifetime.start.p0(i64` 4, ptr %12)
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          40:  store float %3, ptr %12, align 4
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          41:  call void `@llvm.memcpy.p0.p0.i64(ptr` align 4 %d, ptr align 4 %12, i64 4, i1 false)
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          42:  call void `@llvm.lifetime.end.p0(i64` 4, ptr %12)
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          43:  call void `@llvm.lifetime.start.p0(i64` 4, ptr %11)
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          44:  store float %4, ptr %11, align 4
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          45:  call void `@llvm.memcpy.p0.p0.i64(ptr` align 4 %e, ptr align 4 %11, i64 4, i1 false)
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          46:  call void `@llvm.lifetime.end.p0(i64` 4, ptr %11)
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          47:  call void `@llvm.lifetime.start.p0(i64` 4, ptr %10)
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          48:  store float %5, ptr %10, align 4
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          49:  call void `@llvm.memcpy.p0.p0.i64(ptr` align 4 %f, ptr align 4 %10, i64 4, i1 false)
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          50:  call void `@llvm.lifetime.end.p0(i64` 4, ptr %10)
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          51:  call void `@llvm.lifetime.start.p0(i64` 4, ptr %9)
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          52:  store float %6, ptr %9, align 4
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          53:  call void `@llvm.memcpy.p0.p0.i64(ptr` align 4 %g, ptr align 4 %9, i64 4, i1 false)
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          54:  call void `@llvm.lifetime.end.p0(i64` 4, ptr %9)
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          55:  call void `@llvm.lifetime.start.p0(i64` 4, ptr %8)
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          56:  store float %7, ptr %8, align 4
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          57:  call void `@llvm.memcpy.p0.p0.i64(ptr` align 4 %h, ptr align 4 %8, i64 4, i1 false)
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          58:  call void `@llvm.lifetime.end.p0(i64` 4, ptr %8)
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          59:  ret void
check:7'0     ~~~~~~~~~~
          60: }
check:7'0     ~~
          61:
check:7'0     ~
          62: ; Function Attrs: uwtable
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~
          63: define void `@f_float_s_arg(float` %0) unnamed_addr #0 {
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          64: start:
check:7'0     ~~~~~~~
          65:  %1 = alloca [4 x i8], align 4
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          66:  %a = alloca [4 x i8], align 4
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          67:  call void `@llvm.lifetime.start.p0(i64` 4, ptr %1)
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          68:  store float %0, ptr %1, align 4
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          69:  call void `@llvm.memcpy.p0.p0.i64(ptr` align 4 %a, ptr align 4 %1, i64 4, i1 false)
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          70:  call void `@llvm.lifetime.end.p0(i64` 4, ptr %1)
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          71:  ret void
check:7'0     ~~~~~~~~~~
          72: }
check:7'0     ~~
          73:
check:7'0     ~
          74: ; Function Attrs: uwtable
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~
          75: define float `@f_ret_float_s()` unnamed_addr #0 {
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          76: start:
check:7'0     ~~~~~~~
          77:  %_0 = alloca [4 x i8], align 4
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          78:  store float 1.000000e+00, ptr %_0, align 4
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          79:  %0 = load float, ptr %_0, align 4
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          80:  ret float %0
check:7'0     ~~~~~~~~~~~~~~
          81: }
check:7'0     ~~
          82:
check:7'0     ~
          83: ; Function Attrs: uwtable
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~
          84: define void `@f_float_float_s_arg({` float, float } %0) unnamed_addr #0 {
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          85: start:
check:7'0     ~~~~~~~
          86:  %1 = alloca [8 x i8], align 4
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          87:  %a = alloca [8 x i8], align 4
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          88:  call void `@llvm.lifetime.start.p0(i64` 8, ptr %1)
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          89:  store { float, float } %0, ptr %1, align 4
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          90:  call void `@llvm.memcpy.p0.p0.i64(ptr` align 4 %a, ptr align 4 %1, i64 8, i1 false)
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          91:  call void `@llvm.lifetime.end.p0(i64` 8, ptr %1)
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          92:  ret void
check:7'0     ~~~~~~~~~~
          93: }
check:7'0     ~~
          94:
check:7'0     ~
          95: ; Function Attrs: uwtable
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~
          96: define { float, float } `@f_ret_float_float_s()` unnamed_addr #0 {
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          97: start:
check:7'0     ~~~~~~~
          98:  %0 = alloca [8 x i8], align 4
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          99:  store float 1.000000e+00, ptr %0, align 4
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         100:  %1 = getelementptr inbounds i8, ptr %0, i64 4
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         101:  store float 2.000000e+00, ptr %1, align 4
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         102:  %2 = load { float, float }, ptr %0, align 4
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         103:  ret { float, float } %2
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~
         104: }
check:7'0     ~~
         105:
check:7'0     ~
         106: ; Function Attrs: uwtable
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~
         107: define void `@f_float_float_s_arg_insufficient_fprs(float` %0, float %1, float %2, float %3, float %4, float %5, float %6, i64 %7) unnamed_addr #0 {
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         108: start:
check:7'0     ~~~~~~~
         109:  %8 = alloca [8 x i8], align 8
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           .
           .
           .
>>>>>>
------------------------------------------

---- [codegen] tests/codegen/riscv-abi/riscv64-lp64d-abi.rs stdout ----

error: verification with 'FileCheck' failed
status: exit status: 1
command: "/home/ana/git/rust-lang/rust/build/x86_64-unknown-linux-gnu/llvm/build/bin/FileCheck" "--input-file" "/home/ana/git/rust-lang/rust/build/x86_64-unknown-linux-gnu/test/codegen/riscv-abi/riscv64-lp64d-abi/riscv64-lp64d-abi.ll" "/home/ana/git/rust-lang/rust/tests/codegen/riscv-abi/riscv64-lp64d-abi.rs" "--check-prefix=CHECK" "--check-prefix" "NONMSVC" "--allow-unused-prefixes" "--dump-input-context" "100"
stdout: none
--- stderr -------------------------------
/home/ana/git/rust-lang/rust/tests/codegen/riscv-abi/riscv64-lp64d-abi.rs:7:11: error: CHECK: expected string not found in input
// CHECK: define void `@f_fpr_tracking(double` %0, double %1, double %2, double %3, double %4, double %5, double %6, double %7, i8 zeroext %i)
          ^
/home/ana/git/rust-lang/rust/build/x86_64-unknown-linux-gnu/test/codegen/riscv-abi/riscv64-lp64d-abi/riscv64-lp64d-abi.ll:1:1: note: scanning from here
; ModuleID = 'riscv64_lp64d_abi.bed282cd9c73cc17-cgu.0'
^
/home/ana/git/rust-lang/rust/build/x86_64-unknown-linux-gnu/test/codegen/riscv-abi/riscv64-lp64d-abi/riscv64-lp64d-abi.ll:9:1: note: possible intended match here
define void `@f_fpr_tracking(double` %0, double %1, double %2, double %3, double %4, double %5, double %6, double %7, i8 noundef zeroext %i) unnamed_addr #0 {
^

Input file: /home/ana/git/rust-lang/rust/build/x86_64-unknown-linux-gnu/test/codegen/riscv-abi/riscv64-lp64d-abi/riscv64-lp64d-abi.ll
Check file: /home/ana/git/rust-lang/rust/tests/codegen/riscv-abi/riscv64-lp64d-abi.rs

-dump-input=help explains the following input dump.

Input was:
<<<<<<
           1: ; ModuleID = 'riscv64_lp64d_abi.bed282cd9c73cc17-cgu.0'
check:7'0     X~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ error: no match found
           2: source_filename = "riscv64_lp64d_abi.bed282cd9c73cc17-cgu.0"
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           3: target datalayout = "e-m:e-p:64:64-i64:64-i128:128-n32:64-S128"
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           4: target triple = "riscv64-unknown-linux-gnu"
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           5:
check:7'0     ~
           6: %Tricky1 = type { [1 x double] }
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           7:
check:7'0     ~
           8: ; Function Attrs: uwtable
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~
           9: define void `@f_fpr_tracking(double` %0, double %1, double %2, double %3, double %4, double %5, double %6, double %7, i8 noundef zeroext %i) unnamed_addr #0 {
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
check:7'1     ?                                                                                                                                                             possible intended match
          10: start:
check:7'0     ~~~~~~~
          11:  %8 = alloca [8 x i8], align 8
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          12:  %h = alloca [8 x i8], align 8
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          13:  %9 = alloca [8 x i8], align 8
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          14:  %g = alloca [8 x i8], align 8
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          15:  %10 = alloca [8 x i8], align 8
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          16:  %f = alloca [8 x i8], align 8
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          17:  %11 = alloca [8 x i8], align 8
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          18:  %e = alloca [8 x i8], align 8
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          19:  %12 = alloca [8 x i8], align 8
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          20:  %d = alloca [8 x i8], align 8
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          21:  %13 = alloca [8 x i8], align 8
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          22:  %c = alloca [8 x i8], align 8
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          23:  %14 = alloca [8 x i8], align 8
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          24:  %b = alloca [8 x i8], align 8
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          25:  %15 = alloca [8 x i8], align 8
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          26:  %a = alloca [8 x i8], align 8
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          27:  call void `@llvm.lifetime.start.p0(i64` 8, ptr %15)
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          28:  store double %0, ptr %15, align 8
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          29:  call void `@llvm.memcpy.p0.p0.i64(ptr` align 8 %a, ptr align 8 %15, i64 8, i1 false)
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          30:  call void `@llvm.lifetime.end.p0(i64` 8, ptr %15)
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          31:  call void `@llvm.lifetime.start.p0(i64` 8, ptr %14)
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          32:  store double %1, ptr %14, align 8
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          33:  call void `@llvm.memcpy.p0.p0.i64(ptr` align 8 %b, ptr align 8 %14, i64 8, i1 false)
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          34:  call void `@llvm.lifetime.end.p0(i64` 8, ptr %14)
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          35:  call void `@llvm.lifetime.start.p0(i64` 8, ptr %13)
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          36:  store double %2, ptr %13, align 8
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          37:  call void `@llvm.memcpy.p0.p0.i64(ptr` align 8 %c, ptr align 8 %13, i64 8, i1 false)
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          38:  call void `@llvm.lifetime.end.p0(i64` 8, ptr %13)
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          39:  call void `@llvm.lifetime.start.p0(i64` 8, ptr %12)
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          40:  store double %3, ptr %12, align 8
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          41:  call void `@llvm.memcpy.p0.p0.i64(ptr` align 8 %d, ptr align 8 %12, i64 8, i1 false)
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          42:  call void `@llvm.lifetime.end.p0(i64` 8, ptr %12)
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          43:  call void `@llvm.lifetime.start.p0(i64` 8, ptr %11)
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          44:  store double %4, ptr %11, align 8
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          45:  call void `@llvm.memcpy.p0.p0.i64(ptr` align 8 %e, ptr align 8 %11, i64 8, i1 false)
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          46:  call void `@llvm.lifetime.end.p0(i64` 8, ptr %11)
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          47:  call void `@llvm.lifetime.start.p0(i64` 8, ptr %10)
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          48:  store double %5, ptr %10, align 8
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          49:  call void `@llvm.memcpy.p0.p0.i64(ptr` align 8 %f, ptr align 8 %10, i64 8, i1 false)
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          50:  call void `@llvm.lifetime.end.p0(i64` 8, ptr %10)
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          51:  call void `@llvm.lifetime.start.p0(i64` 8, ptr %9)
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          52:  store double %6, ptr %9, align 8
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          53:  call void `@llvm.memcpy.p0.p0.i64(ptr` align 8 %g, ptr align 8 %9, i64 8, i1 false)
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          54:  call void `@llvm.lifetime.end.p0(i64` 8, ptr %9)
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          55:  call void `@llvm.lifetime.start.p0(i64` 8, ptr %8)
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          56:  store double %7, ptr %8, align 8
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          57:  call void `@llvm.memcpy.p0.p0.i64(ptr` align 8 %h, ptr align 8 %8, i64 8, i1 false)
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          58:  call void `@llvm.lifetime.end.p0(i64` 8, ptr %8)
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          59:  ret void
check:7'0     ~~~~~~~~~~
          60: }
check:7'0     ~~
          61:
check:7'0     ~
          62: ; Function Attrs: uwtable
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~
          63: define void `@f_double_s_arg(double` %0) unnamed_addr #0 {
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          64: start:
check:7'0     ~~~~~~~
          65:  %1 = alloca [8 x i8], align 8
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          66:  %a = alloca [8 x i8], align 8
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          67:  call void `@llvm.lifetime.start.p0(i64` 8, ptr %1)
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          68:  store double %0, ptr %1, align 8
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          69:  call void `@llvm.memcpy.p0.p0.i64(ptr` align 8 %a, ptr align 8 %1, i64 8, i1 false)
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          70:  call void `@llvm.lifetime.end.p0(i64` 8, ptr %1)
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          71:  ret void
check:7'0     ~~~~~~~~~~
          72: }
check:7'0     ~~
          73:
check:7'0     ~
          74: ; Function Attrs: uwtable
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~
          75: define double `@f_ret_double_s()` unnamed_addr #0 {
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          76: start:
check:7'0     ~~~~~~~
          77:  %_0 = alloca [8 x i8], align 8
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          78:  store double 1.000000e+00, ptr %_0, align 8
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          79:  %0 = load double, ptr %_0, align 8
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          80:  ret double %0
check:7'0     ~~~~~~~~~~~~~~~
          81: }
check:7'0     ~~
          82:
check:7'0     ~
          83: ; Function Attrs: uwtable
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~
          84: define void `@f_double_double_s_arg({` double, double } %0) unnamed_addr #0 {
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          85: start:
check:7'0     ~~~~~~~
          86:  %1 = alloca [16 x i8], align 8
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          87:  %a = alloca [16 x i8], align 8
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          88:  call void `@llvm.lifetime.start.p0(i64` 16, ptr %1)
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          89:  store { double, double } %0, ptr %1, align 8
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          90:  call void `@llvm.memcpy.p0.p0.i64(ptr` align 8 %a, ptr align 8 %1, i64 16, i1 false)
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          91:  call void `@llvm.lifetime.end.p0(i64` 16, ptr %1)
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          92:  ret void
check:7'0     ~~~~~~~~~~
          93: }
check:7'0     ~~
          94:
check:7'0     ~
          95: ; Function Attrs: uwtable
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~
          96: define { double, double } `@f_ret_double_double_s()` unnamed_addr #0 {
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          97: start:
check:7'0     ~~~~~~~
          98:  %0 = alloca [16 x i8], align 8
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          99:  store double 1.000000e+00, ptr %0, align 8
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         100:  %1 = getelementptr inbounds i8, ptr %0, i64 8
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         101:  store double 2.000000e+00, ptr %1, align 8
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         102:  %2 = load { double, double }, ptr %0, align 8
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         103:  ret { double, double } %2
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~
         104: }
check:7'0     ~~
         105:
check:7'0     ~
         106: ; Function Attrs: uwtable
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~
         107: define void `@f_double_float_s_arg({` double, float } %0) unnamed_addr #0 {
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         108: start:
check:7'0     ~~~~~~~
         109:  %1 = alloca [12 x i8], align 8
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           .
           .
           .
>>>>>>
------------------------------------------

failures:
    [codegen] tests/codegen/riscv-abi/call-llvm-intrinsics.rs
    [codegen] tests/codegen/riscv-abi/riscv64-lp64f-lp64d-abi.rs
    [codegen] tests/codegen/riscv-abi/riscv64-lp64d-abi.rs

test result: FAILED. 498 passed; 3 failed; 151 ignored; 0 measured; 0 filtered out; finished in 4.70s

Some tests failed in compiletest suite=codegen mode=codegen host=x86_64-unknown-linux-gnu target=riscv64gc-unknown-linux-gnu
Build completed unsuccessfully in 0:00:15
```

</details>
2024-06-06 14:46:19 -07:00
Rémy Rakic
216424da32 Revert "Rollup merge of #124099 - voidc:disallow-ambiguous-expr-attrs, r=davidtwco"
This reverts commit 57dad1d75e, reversing
changes made to 36316df9fe.
2024-06-06 20:39:54 +00:00
bors
98489f2487 Auto merge of #126068 - lqd:revert-124976, r=petrochenkov
Revert "use `tcx.used_crates(())` more" before it reaches beta

There are more open issues caused by #124976 than will be fixed by #125493 alone. The beta cut is soon, so let's revert it and buy some time to analyze and fix these issues in our own time.

fixes https://github.com/rust-lang/rust/issues/125474
fixes https://github.com/rust-lang/rust/issues/125484
fixes https://github.com/rust-lang/rust/issues/125646
fixes https://github.com/rust-lang/rust/issues/125707
fixes #126066
fixes #125934
fixes https://github.com/rust-lang/rust/issues/126021

r? `@petrochenkov`
`@bors` p=1
2024-06-06 20:18:43 +00:00
Jakub Beránek
a5429d53af
Remove same-lib-two-locations-no-panic run-make test
This test doesn't really make any sense anymore, it became broken a long time ago.
2024-06-06 21:41:47 +02:00
Jakub Beránek
6e1121b492
Do not use relative paths to Rust source root in run-make tests 2024-06-06 19:16:53 +02:00
Urgau
89d86ae5bd Don't warn on fields in the unreachable_pub lint 2024-06-06 19:07:05 +02:00
Zalathar
dc91ad05e3 Port tests/run-make-fulldeps/obtain-borrowck to ui-fulldeps 2024-06-07 00:41:31 +10:00
bors
67caf52fbc Auto merge of #125406 - tbu-:pr_rm_path_with_extension, r=Nadrieril
Directly add extension instead of using `Path::with_extension`

`Path::with_extension` has a nice footgun when the original path doesn't contain an extension: Anything after the last dot gets removed.
2024-06-06 10:24:24 +00:00
Rémy Rakic
9ddf5726f0 add non-regression run-make test for issues 125474, 125484, and 125646 2024-06-06 10:06:28 +00:00
Rémy Rakic
0a4176a831 Revert "Rollup merge of #124976 - petrochenkov:usedcrates, r=oli-obk"
This reverts commit eda4a35f36, reversing
changes made to eb6b35b5bc.
2024-06-06 10:06:28 +00:00
Guillaume Gomez
7ad5ebc75c Migrate run-make/manual-crate-name to rmake.rs 2024-06-06 10:19:15 +02:00
bors
2d28b6384e Auto merge of #124482 - spastorino:unsafe-extern-blocks, r=oli-obk
Unsafe extern blocks

This implements RFC 3484.

Tracking issue #123743 and RFC https://github.com/rust-lang/rfcs/pull/3484

This is better reviewed commit by commit.
2024-06-06 08:14:58 +00:00
Scott McMurray
021ccf6c4e Enable GVN for AggregateKind::RawPtr & UnOp::PtrMetadata 2024-06-06 00:25:58 -07:00
bors
2b6a34273d Auto merge of #126056 - matthiaskrgr:rollup-ytwg62v, r=matthiaskrgr
Rollup of 6 pull requests

Successful merges:

 - #124731 (Add translation support by mdbook-i18n-helpers to bootstrap)
 - #125168 (Match ergonomics 2024: align implementation with RFC)
 - #125925 (Don't trigger `unsafe_op_in_unsafe_fn` for deprecated safe fns)
 - #125987 (When `derive`ing, account for HRTB on `BareFn` fields)
 - #126045 (check_expr_struct_fields: taint context with errors if struct definit…)
 - #126048 (Fix typos in cargo-specifics.md)

r? `@ghost`
`@rustbot` modify labels: rollup
2024-06-06 05:56:06 +00:00
bors
003a902792 Auto merge of #125958 - BoxyUwU:remove_const_ty, r=lcnr
Remove the `ty` field from type system `Const`s

Fixes #125556
Fixes #122908

Part of the work on `adt_const_params`/`generic_const_param_types`/`min_generic_const_exprs`/generally making the compiler nicer. cc rust-lang/project-const-generics#44

Please review commit-by-commit otherwise I wasted a lot of time not just squashing this into a giant mess (and also it'll be SO much nicer because theres a lot of fluff changes mixed in with other more careful changes if looking via File Changes

---

Why do this?
- The `ty` field keeps causing ICEs and weird behaviour due to it either being treated as "part of the const" or it being forgotten about leading to ICEs.
- As we move forward with `adt_const_params` and a potential `min_generic_const_exprs` it's going to become more complex to actually lower the correct `Ty<'tcx>`
- It muddles the idea behind how we check `Const` arguments have the correct type. By having the `ty` field it may seem like we ought to be relating it when we relate two types, or that its generally important information about the `Const`.
- Brings the compiler more in line with `a-mir-formality` as that also tracks the type of type system `Const`s via `ConstArgHasType` bounds in the env instead of on the `Const` itself.
- A lot of stuff is a lot nicer when you dont have to pass around the type of a const lol. Everywhere we construct `Const` is now significantly nicer 😅

See #125671's description for some more information about the `ty` field

---

General summary of changes in this PR:

- Add `Ty` to `ConstKind::Value` as otherwise there is no way to implement `ConstArgHasType` to ensure that const arguments are correctly typed for the parameter when we stop creating anon consts for all const args. It's also just incredibly difficult/annoying to thread the correct `Ty` around to a bunch of ctfe functions otherwise.
-  Fully implement `ConstArgHasType` in both the old and new solver. Since it now has no reliance on the `ty` field it serves its originally intended purpose of being able to act as a double check that trait vs impls have correctly typed const parameters. It also will now be able to be responsible for checking types of const arguments to parameters under `min_generic_const_exprs`.
- Add `Ty` to `mir::Const::Ty`. I dont have a great understanding of why mir constants are setup like this to be honest. Regardless they need to be able to determine the type of the const and the easiest way to make this happen was to simply store the `Ty` along side the `ty::Const`. Maybe we can do better here in the future but I'd have to spend way more time looking at everywhere we use `mir::Const`.
- rustdoc has its own `Const` which also has a `ty` field. It was relatively easy to remove this.

---

r? `@lcnr` `@compiler-errors`
2024-06-06 03:41:23 +00:00
Matthias Krüger
3121a5ca3b
Rollup merge of #126045 - olafes:master, r=compiler-errors
check_expr_struct_fields: taint context with errors if struct definit…

Taint errors while checking `struct { field: 1 }` below if struct definition has duplicated fields so that we don't pass it to const eval.

fixes #125842, fixes #124464, fixes #124552
```rust
struct Struct {
    field: Option<u8>,
    field: u8,
}

static STATIC: Struct = Struct {
    field: 1,
};

pub fn main() {}
```
(This was #125947 but i messed something up, sorry)
r? ``@compiler-errors``
2024-06-06 04:17:27 +02:00
Matthias Krüger
55b76f4720
Rollup merge of #125987 - estebank:issue-122622, r=Nadrieril
When `derive`ing, account for HRTB on `BareFn` fields

When given

```rust
trait SomeTrait {
    type SomeType<'a>;
}

#[derive(Clone)]
struct Foo<T: SomeTrait> {
    x: for<'a> fn(T::SomeType<'a>)
}
```

expand to

```rust
impl<T: ::core::clone::Clone + SomeTrait> ::core::clone::Clone for Foo<T>
    where for<'a> T::SomeType<'a>: ::core::clone::Clone {
    #[inline]
    fn clone(&self) -> Foo<T> {
        Foo { x: ::core::clone::Clone::clone(&self.x) }
    }
}
```

instead of the previous invalid

```
impl<T: ::core::clone::Clone + SomeTrait> ::core::clone::Clone for Foo<T>
    where T::SomeType<'a>: ::core::clone::Clone {
    #[inline]
    fn clone(&self) -> Foo<T> {
        Foo { x: ::core::clone::Clone::clone(&self.x) }
    }
}
```

Fix #122622.

<!--
If this PR is related to an unstable feature or an otherwise tracked effort,
please link to the relevant tracking issue here. If you don't know of a related
tracking issue or there are none, feel free to ignore this.

This PR will get automatically assigned to a reviewer. In case you would like
a specific user to review your work, you can assign it to them by using

    r​? <reviewer name>
-->
2024-06-06 04:17:26 +02:00
Matthias Krüger
8f04878dee
Rollup merge of #125925 - tbu-:pr_unsafe_env_unsafe_op_in_unsafe_fn, r=Nadrieril
Don't trigger `unsafe_op_in_unsafe_fn` for deprecated safe fns

Fixes #125875.

Tracking:

- #124866
2024-06-06 04:17:26 +02:00
Matthias Krüger
2611b292c4
Rollup merge of #125168 - Jules-Bertholet:match-ergonomics-2024-align-with-rfc, r=Nadrieril
Match ergonomics 2024: align implementation with RFC

- Remove eat-two-layers (`ref_pat_everywhere`)
- Consolidate `mut_preserve_binding_mode_2024` into `ref_pat_eat_one_layer_2024`
- `&mut` no longer peels off `&`
- Apply "no `ref mut` behind `&`" rule on all editions with `ref_pat_eat_one_layer_2024`
- Require `mut_ref` feature gate for all mutable by-reference bindings

r? ``@Nadrieril``

cc https://github.com/rust-lang/rust/issues/123076

``@rustbot`` label A-edition-2024 A-patterns
2024-06-06 04:17:26 +02:00
bors
d0ccb5413e Auto merge of #122505 - oli-obk:visit_nested_body2, r=tmiasko
Don't walk the bodies of free constants for reachability.

follow-up to #122371

cc #119214

This avoids codegening items (e.g. functions) that are only used during const eval, but do not reach their final constant value (e.g. via function pointers).

r? `@tmiasko`
2024-06-06 01:33:14 +00:00
Veera
6d19ac36b9 Update Tests 2024-06-05 20:08:00 -04:00
Tobias Bucher
bb901a114f Don't trigger unsafe_op_in_unsafe_fn for deprecated safe fns
Fixes #125875.
2024-06-05 23:44:59 +02:00
Boxy
3a6b606ad9 remove const arg windows debug info tests 2024-06-05 22:39:42 +01:00
Michael Goulet
2e082677a6 Fix function-names.rs test 2024-06-05 22:25:42 +01:00
Boxy
f74119a2e4 Bless tests and handle tests/crashes 2024-06-05 22:25:42 +01:00
bors
72fdf913c5 Auto merge of #126038 - matthiaskrgr:rollup-h4rm3x2, r=matthiaskrgr
Rollup of 9 pull requests

Successful merges:

 - #124840 (resolve: mark it undetermined if single import is not has any bindings)
 - #125622 (Winnow private method candidates instead of assuming any candidate of the right name will apply)
 - #125648 (Remove unused(?) `~/rustsrc` folder from docker script)
 - #125672 (Add more ABI test cases to miri (RFC 3391))
 - #125800 (Fix `mut` static task queue in SGX target)
 - #125871 (Orphanck[old solver]: Consider opaque types to never cover type parameters)
 - #125893 (Handle all GVN binops in a single place.)
 - #126008 (Port `tests/run-make-fulldeps/issue-19371` to ui-fulldeps)
 - #126032 (Update description of the `IsTerminal` example)

r? `@ghost`
`@rustbot` modify labels: rollup
2024-06-05 20:53:32 +00:00
Olaf Siwiński
743c41757c
check_expr_struct_fields: taint context with errors if struct definition is malformed 2024-06-05 21:54:22 +02:00
Ana Hobden
ae4ae1685c
Repair several riscv64gc-unknown-linux-gnu codegen tests
Fix tests/codegen/riscv-abi/call-llvm-intrinsics.rs

Fix tests/codegen/riscv-abi/riscv64-lp64d-abi.rs

Fix tests/codegen/riscv-abi/riscv64-lp64f-lp64d-abi.rs

On riscv64gc ignore tests/ui/debuginfo/debuginfo-emit-llvm-ir-and-split-debuginfo.rs

Make tests/codegen/riscv-abi/riscv64-lp64d-abi.rs no_core

Make tests/codegen/riscv-abi/riscv64-lp64f-lp64d-abi.rs no_core

Set -O for tests/codegen/riscv-abi/riscv64-lp64d-abi.rs

Set -O for tests/codegen/riscv-abi/riscv64-lp64f-lp64d-abi.rs
2024-06-05 09:39:14 -07:00
Matthias Krüger
1c17449ae3
Rollup merge of #126008 - Zalathar:fulldeps-19371, r=jieyouxu
Port `tests/run-make-fulldeps/issue-19371` to ui-fulldeps

This test can run as an ordinary `tests/ui-fulldeps` test, with the help of some additional header variable substitutions to supply a sysroot and linker.

---

Unlike #125973, this test appears to be testing something vaguely useful and breakable, which is why I didn't just delete it.
2024-06-05 18:21:15 +02:00
Matthias Krüger
9c8e46d08a
Rollup merge of #125871 - fmease:fix-orphanck-opaques, r=lcnr
Orphanck[old solver]: Consider opaque types to never cover type parameters

This fixes an oversight of mine in #117164. The change itself has already been FCP'ed.

This only affects the old solver, the next solver already correctly rejects the added test since #117164.

r? ``@lcnr``
2024-06-05 18:21:14 +02:00
Matthias Krüger
dd2e1a3b34
Rollup merge of #126022 - lcnr:generalize-alias-bivariant, r=compiler-errors
set `has_unconstrained_ty_var` when generalizing aliases in bivariant contexts

this previously prevented the `regression-31157` benchmark from building

r? `@compiler-errors`
2024-06-05 18:21:12 +02:00
Matthias Krüger
79bb336b9c
Rollup merge of #125921 - Zalathar:buckets, r=oli-obk
coverage: Carve out hole spans in a separate early pass

When extracting spans from MIR for use in coverage instrumentation, we sometimes need to identify *hole spans* (currently just closures), and carve up the other spans so that they don't overlap with holes.

This PR simplifies the main coverage-span-refiner by extracting the hole-carving process into a separate early pass. That pass produces a series of independent buckets, and we run the span-refiner on each bucket separately.

There is almost no difference in the resulting mappings, other than in some edge cases involving macros.
2024-06-05 18:21:11 +02:00
Matthias Krüger
9abf8b105e
Rollup merge of #125622 - oli-obk:define_opaque_types15, r=compiler-errors
Winnow private method candidates instead of assuming any candidate of the right name will apply

partially reverts https://github.com/rust-lang/rust/pull/60721

My original motivation was just to avoid the `delay_span_bug` (by attempting to thread the `ErrorGuaranteed` through to here). But then I realized that the error message is wrong. It refers to the `Foo<A>::foo` instead of `Foo<B>::foo`. This is almost invisible, because both functions are the same, but on different lines, so `-Zui-testing` makes it so the test is the same no matter which of these two functions is referenced.

But there's a much more obvious bug: If `Foo<B>` does not have a `foo` method at all, but `Foo<A>` has a private `foo` method, then we'll refer to that one. This has now been fixed, and we report a normal `method not found` error.

The way this is done is by creating a list of all possible private functions (just like we create a list of the public functions that can actually be called), and then winnowing it by analyzing where bounds and `Self` types to see if any of the found methods can actually apply (again, just like with the list of public functions).

I wonder if there is room for doing the same thing with unstable functions instead of running all of method resolution twice.

r? ``@compiler-errors`` for method resolution stuff
2024-06-05 18:21:11 +02:00
Matthias Krüger
69a8c139f1
Rollup merge of #124840 - bvanjoi:fix-124490, r=petrochenkov
resolve: mark it undetermined if single import is not has any bindings

- Fixes #124490
- Fixes #125013

This issue arises from incorrect resolution updates, for example:

```rust
mod a {
    pub mod b {
        pub mod c {}
    }
}

use a::*;

use b::c;
use c as b;

fn main() {}
```

1. In the first loop, binding `(root, b)` is refer to `root:🅰️:b` due to `use a::*`.
    1. However, binding `(root, c)` isn't defined by `use b::c` during this stage because `use c as b` falls under the `single_imports` of `(root, b)`, where the `imported_module` hasn't been computed yet. This results in marking the `path_res` for `b` as `Indeterminate`.
    2. Then, the `imported_module` for `use c as b` will be recorded.
2. In the second loop, `use b::c` will be processed again:
    1. Firstly, it attempts to find the `path_res` for `(root, b)`.
    2. It will iterate through the `single_imports` of `use b::c`, encounter `use c as b`, attempt to resolve `c` in `root`, and ultimately return `Err(Undetermined)`, thus passing the iterator.
    3. Use the binding `(root, b)` -> `root:🅰️:b` introduced by `use a::*` and ultimately return `root:🅰️:b` as the `path_res` of `b`.
    4. Then define the binding `(root, c)` -> `root:🅰️🅱️:c`.
3. Then process `use c as b`, update the resolution for `(root, b)` to refer to `root:🅰️🅱️:c`, ultimately causing inconsistency.

In my view, step `2.2` has an issue where it should exit early, similar to the behavior when there's no `imported_module`. Therefore, I've added an attribute called `indeterminate` to `ImportData`. This will help us handle only those single imports that have at least one determined binding.

r? ``@petrochenkov``
2024-06-05 18:21:11 +02:00
Matthias Krüger
e1745122ae
Rollup merge of #125792 - compiler-errors:dont-drop-upcast-cand, r=lcnr
Don't drop `Unsize` candidate in intercrate mode

Fixes #125767
2024-06-05 18:21:09 +02:00
Matthias Krüger
49f950434b
Rollup merge of #125407 - pacak:no-lending-iterators, r=pnkfelix
Detect when user is trying to create a lending `Iterator` and give a custom explanation

The scope for this diagnostic is to detect lending iterators specifically and it's main goal is to help beginners to understand that what they are trying to implement might not be possible for `Iterator` trait specifically.

I ended up to changing the wording from originally proposed in the ticket because it might be misleading otherwise: `Data` might have a lifetime parameter but it can be unrelated to items user is planning to return.

Fixes https://github.com/rust-lang/rust/issues/125337
2024-06-05 18:21:08 +02:00
Oli Scherer
a0358f44b3 Also support generic constants 2024-06-05 15:40:11 +00:00
Oli Scherer
22d0073d47 Don't walk the bodies of free constants for reachability. 2024-06-05 15:40:11 +00:00
Oli Scherer
50b07aa899 add reachability test for const bodies 2024-06-05 15:40:11 +00:00
r0cky
35130d7233 Detect pub structs never constructed and unused associated constants in traits 2024-06-05 23:20:09 +08:00
Santiago Pastorino
525828d5ee
Add rustfix test for unsafe extern blocks 2024-06-05 09:36:01 -03:00
Santiago Pastorino
be0726c7c1
Add revisions to safe/unsafe on unadorned extern blocks test 2024-06-05 09:36:01 -03:00
Santiago Pastorino
1afc7d716c
Make MISSING_UNSAFE_ON_EXTERN lint emit future compat info with suggestion to prepend unsafe 2024-06-05 09:36:01 -03:00
Santiago Pastorino
0380321e78
Add unsafe_extern_blocks feature flag 2024-06-05 09:35:57 -03:00
lcnr
a8e091de4a bivariant alias: set has_unconstrained_ty_var 2024-06-05 11:48:03 +02:00
Jubilee
f12fe3a33e
Rollup merge of #126004 - compiler-errors:captures-soundness-test, r=lcnr
Add another test for hidden types capturing lifetimes that outlive but arent mentioned in substs

Another test to make sure future implementations of https://github.com/rust-lang/rust/pull/116040 don't have any subtle unsoundness 🤔

r? types
2024-06-05 01:14:35 -07:00
Jubilee
eb2819e706
Rollup merge of #125996 - tmiasko:closure-recursively-reachable, r=oli-obk
Closures are recursively reachable

Fixes #126012.
2024-06-05 01:14:34 -07:00
Jubilee
2b89c1b9ae
Rollup merge of #125920 - bjorn3:allow_static_mut_linkage_def, r=Urgau
Allow static mut definitions with #[linkage]

Unlike static declarations with #[linkage], for definitions rustc doesn't rewrite it to add an extra indirection.

This was accidentally disallowed in https://github.com/rust-lang/rust/pull/125046.

cc https://github.com/rust-lang/rust/pull/125800#issuecomment-2143776298
2024-06-05 01:14:32 -07:00
Jubilee
78d9a7e107
Rollup merge of #125906 - compiler-errors:simplify-method-error-args, r=fmease
Remove a bunch of redundant args from `report_method_error`

Rebased on top of #125397 because I had originally asked there (https://github.com/rust-lang/rust/pull/125397#discussion_r1610124799) for this change to be made, but I just chose to do it myself.

r? fmease
2024-06-05 01:14:32 -07:00
Jubilee
05b4674054
Rollup merge of #125815 - nnethercote:rustc_parse-top-level-cleanups, r=spastorino
`rustc_parse` top-level cleanups

A bunch of improvements in and around `compiler/rustc_parse/src/lib.rs`. Many of the changes streamline the API in that file from this (12 functions and one macro):
```
    name                              args                  return type
    ----                              ----                  -----------
    panictry_buffer!                  Result<T, Vec<Diag>>  T

pub parse_crate_from_file             path                  PResult<Crate>
pub parse_crate_attrs_from_file       path                  PResult<AttrVec>
pub parse_crate_from_source_str       name,src              PResult<Crate>
pub parse_crate_attrs_from_source_str name,src              PResult<AttrVec>

pub new_parser_from_source_str        name,src              Parser
pub maybe_new_parser_from_source_str  name,src              Result<Parser, Vec<Diag>>
pub new_parser_from_file              path,error_sp         Parser
    maybe_source_file_to_parser       srcfile               Result<Parser, Vec<Diag>>

pub parse_stream_from_source_str      name,src,override_sp  TokenStream
pub source_file_to_stream             srcfile,override_sp   TokenStream
    maybe_file_to_stream              srcfile,override_sp   Result<TokenStream, Vec<Diag>>

pub stream_to_parser                  stream,subparser_name Parser
```
to this:
```
    name                              args                  return type
    ----                              ----                  -----------
    unwrap_or_emit_fatal              Result<T, Vec<Diag>>  T

pub new_parser_from_source_str        name,src              Result<Parser, Vec<Diag>>
pub new_parser_from_file              path,error_sp         Result<Parser, Vec<Diag>>
    new_parser_from_source_file       srcfile               Result<Parser, Vec<Diag>>

pub source_str_to_stream              name,src,override_sp  Result<TokenStream, Vec<Diag>>
    source_file_to_stream             srcfile,override_sp   Result<TokenStream, Vec<Diag>>
```
I found the old API quite confusing, with lots of similar-sounding function names and no clear structure. I think the new API is much better.

r? `@spastorino`
2024-06-05 01:14:31 -07:00
Jubilee
0f2b34acdc
Rollup merge of #125683 - Oneirical:patience-testing-test, r=jieyouxu
Rewrite `suspicious-library`, `resolve-rename` and `incr-prev-body-beyond-eof` `run-make` tests in `rmake.rs` format

Part of #121876 and the associated [Google Summer of Code project](https://blog.rust-lang.org/2024/05/01/gsoc-2024-selected-projects.html).

Some oddly specific ignore flags in `incr-prev-body-beyond-eof`:

```rs
// ignore-none
// ignore-nvptx64-nvidia-cuda
```

it could be interesting to run a try job, but it seems there is no nvidia-cuda in the CI settings (`jobs.yml`).

try-job: armhf-gnu
2024-06-05 01:14:30 -07:00
Jubilee
9ccc7b78ec
Rollup merge of #123168 - joshtriplett:size-of-prelude, r=Amanieu
Add `size_of` and `size_of_val` and `align_of` and `align_of_val` to the prelude

(Note: need to update the PR to add `align_of` and `align_of_val`, and remove the second commit with the myriad changes to appease the lint.)

Many, many projects use `size_of` to get the size of a type. However,
it's also often equally easy to hardcode a size (e.g. `8` instead of
`size_of::<u64>()`). Minimizing friction in the use of `size_of` helps
ensure that people use it and make code more self-documenting.

The name `size_of` is unambiguous: the name alone, without any prefix or
path, is self-explanatory and unmistakeable for any other functionality.
Adding it to the prelude cannot produce any name conflicts, as any local
definition will silently shadow the one from the prelude. Thus, we don't
need to wait for a new edition prelude to add it.
2024-06-05 01:14:29 -07:00
Zalathar
54b2e86db7 Port tests/run-make-fulldeps/issue-19371 to ui-fulldeps 2024-06-05 13:52:10 +10:00
Nicholas Nethercote
f7d49fdf4f Print token::Interpolated with token stream pretty printing.
Instead of using AST pretty printing.

This is a step towards removing `token::Interpolated`, which will
eventually (in #124141) be replaced with a token stream within invisible
delimiters.

This changes (improves) the output of the `stringify!` macro in some
cases. This is allowed. As the `stringify!` docs say: "Note that the
expanded results of the input tokens may change in the future. You
should be careful if you rely on the output."

Test changes:

- tests/ui/macros/stringify.rs: this used to test both token stream
  pretty printing and AST pretty printing via different ways of invoking
  of `stringify!` (i.e. `$expr` vs `$tt`). But those two different
  invocations now give the same result, which is a nice consistency
  improvement. This removes the need for all the `c2*` macros. The AST
  pretty printer now has more thorough testing thanks to #125236.

- tests/ui/proc-macro/*: minor improvements where small differences
  between `INPUT (DISPLAY)` output and `DEEP-RE-COLLECTED (DISPLAY)`
  output disappear.
2024-06-05 13:07:32 +10:00
Michael Goulet
dd6bca56ec Add another test for hidden types capturing lifetimes that outlive but arent mentioned in substs 2024-06-04 21:06:29 -04:00
Nicholas Nethercote
b9037339cb Make top-level rustc_parse functions fallible.
Currently we have an awkward mix of fallible and infallible functions:
```
       new_parser_from_source_str
 maybe_new_parser_from_source_str
       new_parser_from_file
(maybe_new_parser_from_file)        // missing
      (new_parser_from_source_file) // missing
 maybe_new_parser_from_source_file
       source_str_to_stream
 maybe_source_file_to_stream
```
We could add the two missing functions, but instead this commit removes
of all the infallible ones and renames the fallible ones leaving us with
these which are all fallible:
```
new_parser_from_source_str
new_parser_from_file
new_parser_from_source_file
source_str_to_stream
source_file_to_stream
```
This requires making `unwrap_or_emit_fatal` public so callers of
formerly infallible functions can still work.

This does make some of the call sites slightly more verbose, but I think
it's worth it for the simpler API. Also, there are two `catch_unwind`
calls and one `catch_fatal_errors` call in this diff that become
removable thanks this change. (I will do that in a follow-up PR.)
2024-06-05 10:38:03 +10:00
bors
a330e49593 Auto merge of #125989 - GuillaumeGomez:rollup-xu69i13, r=GuillaumeGomez
Rollup of 11 pull requests

Successful merges:

 - #106186 (Add function `core::iter::chain`)
 - #125596 (Convert `proc_macro_back_compat` lint to an unconditional error.)
 - #125696 (Explain differences between `{Once,Lazy}{Cell,Lock}` types)
 - #125917 (Create `run-make` `env_var` and `env_var_os` helpers)
 - #125927 (Ignore `vec_deque_alloc_error::test_shrink_to_unwind` test on non-unwind targets)
 - #125930 (feat(opt-dist): new flag `--benchmark-cargo-config`)
 - #125932 (Fix typo in the docs of `HashMap::raw_entry_mut`)
 - #125933 (Update books)
 - #125944 (Update fuchsia maintainers)
 - #125946 (Include trailing commas in wrapped function declarations [RustDoc])
 - #125973 (Remove `tests/run-make-fulldeps/pretty-expanded`)

Failed merges:

 - #125815 (`rustc_parse` top-level cleanups)

r? `@ghost`
`@rustbot` modify labels: rollup
2024-06-04 21:21:18 +00:00
León Orell Valerian Liehr
c59a2b2746
Cleanup: HIR ty lowering: Consolidate assoc item access checking 2024-06-04 23:13:16 +02:00
Tomasz Miąsko
5d26f58423 Closures are recursively reachable 2024-06-04 22:50:35 +02:00
Esteban Küber
e7ad2da7f1 When deriveing, account for HRTB on BareFn fields
When given

```rust
trait SomeTrait {
    type SomeType<'a>;
}

struct Foo<T: SomeTrait> {
    x: for<'a> fn(T::SomeType<'a>)
}
```

expand to

```rust
impl<T: ::core::clone::Clone + SomeTrait> ::core::clone::Clone for Foo<T>
    where for<'a> T::SomeType<'a>: ::core::clone::Clone {
    #[inline]
    fn clone(&self) -> Foo<T> {
        Foo { x: ::core::clone::Clone::clone(&self.x) }
    }
}
```

instead of the previous invalid

```
impl<T: ::core::clone::Clone + SomeTrait> ::core::clone::Clone for Foo<T>
    where T::SomeType<'a>: ::core::clone::Clone {
    #[inline]
    fn clone(&self) -> Foo<T> {
        Foo { x: ::core::clone::Clone::clone(&self.x) }
    }
}
```

Fix #122622.
2024-06-04 20:46:03 +00:00
Tobias Bucher
f7c51a2d2f Directly add extension instead of using Path::with_extension
`Path::with_extension` has a nice footgun when the original path doesn't
contain an extension: Anything after the last dot gets removed.
2024-06-04 22:12:31 +02:00
Guillaume Gomez
f41c3e9a69
Rollup merge of #125973 - Zalathar:pretty, r=lqd
Remove `tests/run-make-fulldeps/pretty-expanded`

This was an ancient regression test for #12685, caused by `-Zunpretty=expanded` crashing on certain code produced by `#[derive(RustcEncodable)]`.

Given that this test predates `//@ pretty-expanded` tests, and was tied to ancient implementation details of the pretty-printer and `#[derive(RustcEncodable)]` (which the test no longer even uses), I think we can safely delete it.

---

Spotted via #125948.
2024-06-04 21:41:38 +02:00
Guillaume Gomez
532aa9a81d
Rollup merge of #125946 - Sergi-Ferrez:master, r=notriddle,fmease
Include trailing commas in wrapped function declarations [RustDoc]

Fixes #125901.
2024-06-04 21:41:38 +02:00
Guillaume Gomez
5364a14370
Rollup merge of #125917 - GuillaumeGomez:env-var-helpers, r=jieyouxu
Create `run-make` `env_var` and `env_var_os` helpers

As mentioned in https://github.com/rust-lang/rust/pull/125886. It's quite useful to know which environment variable failed, so better provide a helper helping with that.

r? `@jieyouxu`
2024-06-04 21:41:34 +02:00
Guillaume Gomez
fa96e2cb4f
Rollup merge of #125596 - nnethercote:rental-hard-error, r=estebank
Convert `proc_macro_back_compat` lint to an unconditional error.

We still check for the `rental`/`allsorts-rental` crates. But now if they are detected we just emit a fatal error, instead of emitting a warning and providing alternative behaviour.

The original "hack" implementing alternative behaviour was added in #73345.

The lint was added in #83127.

The tracking issue is #83125.

The direct motivation for the change is that providing the alternative behaviour is interfering with #125174 and follow-on work.

r? ``@estebank``
2024-06-04 21:41:33 +02:00
Oneirical
59e2074c79 rewrite suspicious-library in rmake 2024-06-04 15:27:13 -04:00
bors
23e040adec Auto merge of #125426 - jieyouxu:rmake-support-env-reset, r=saethlin
Update `compiler-builtins` test to not clear essential env vars

Noticed in https://github.com/rust-lang/rust/pull/122580#issuecomment-2125755689, the `compiler-builtins` test failed on Windows for a `cargo` invocation because necessary env vars `TMP` and `TEMP` were cleared by `Command::env_clear`, causing temp dir eventually used by codegen to fallback to the Windows directory, which will trigger permission errors.

This PR removes the `env_clear` on the cargo invocation.

r? `@saethlin` (feel free to reroll, since you authored the test)

try-job: x86_64-msvc
try-job: test-various
2024-06-04 19:14:28 +00:00
Guillaume Gomez
7e993b24d5 Create run-make env_var and env_var_os helpers 2024-06-04 21:07:48 +02:00
Santiago Pastorino
bac72cf7cf
Add safe/unsafe to static inside extern blocks 2024-06-04 14:19:43 -03:00
Santiago Pastorino
b4cbdb7246
Fail when using safe/unsafe items inside unadorned extern blocks 2024-06-04 14:19:43 -03:00
Santiago Pastorino
2a377122dd
Handle safety keyword for extern block inner items 2024-06-04 14:19:42 -03:00
Santiago Pastorino
bbddc9b58f
Allow using unsafe on functions inside extern blocks 2024-06-04 14:19:42 -03:00
Santiago Pastorino
3ba8de0b60
Make extern blocks without unsafe warn in edition 2024 2024-06-04 14:19:42 -03:00
Santiago Pastorino
46cd80b691
Test that unsafe extern defines unsafe fns 2024-06-04 14:19:42 -03:00
Santiago Pastorino
6d670b74e5
Allow unsafe extern on all editions 2024-06-04 14:19:42 -03:00
Santiago Pastorino
68b0b86c5b
Add unsafe extern blocks failing tests 2024-06-04 14:19:41 -03:00
bors
44701e070c Auto merge of #123536 - compiler-errors:simplify-int-float, r=lcnr
Simplify `IntVarValue`/`FloatVarValue`

r? `@ghost`
2024-06-04 17:07:13 +00:00
León Orell Valerian Liehr
874670399c
Orphanck: Consider opaque types to never cover type parameters 2024-06-04 18:57:19 +02:00
Oli Scherer
ffb1b2c148 Add test description 2024-06-04 15:34:04 +00:00
Oli Scherer
81895065bb Give test a more useful name 2024-06-04 15:33:51 +00:00
Oli Scherer
7894a11483 Move tests to a more appropriate directory 2024-06-04 15:33:20 +00:00
Oli Scherer
7d151fa3b0 Turn a delayed bug back into a normal bug by winnowing private method candidates instead of assuming any candidate of the right name will apply. 2024-06-04 15:32:41 +00:00