Commit Graph

42554 Commits

Author SHA1 Message Date
lcnr
58936c1d2a fix gce typing_mode mismatch 2024-11-25 19:58:12 +01:00
Taiki Endo
687dc19cb6 Fix handling of x18 in AArch64 inline assembly on ohos/trusty or with -Zfixed-x18 2024-11-26 03:10:22 +09:00
Michael Goulet
bcfc8ab319 Remove span hack that doesnt do anything 2024-11-25 17:38:40 +00:00
Michael Goulet
4a896e7e3e No need to store original_span in ClauseWithSupertraitSpan 2024-11-25 17:38:40 +00:00
Michael Goulet
d3867174c0 Simplify object_region_bounds 2024-11-25 17:38:28 +00:00
Henry Jiang
9f1cfec299 use ReadCache for archive loading 2024-11-25 11:15:50 -05:00
Taiki Endo
59f01cdbf4 Support predicate registers (clobber-only) in Hexagon inline assembly 2024-11-25 23:11:17 +09:00
León Orell Valerian Liehr
4301d0266d Remove dead code stemming from the old effects desugaring (II) 2024-11-25 12:16:36 +01:00
Frank King
161221da9e Refactor where predicates, and reserve for attributes support 2024-11-25 16:38:35 +08:00
Matthias Krüger
3f86eddf83 Rollup merge of #131664 - taiki-e:s390x-asm-vreg-inout, r=Amanieu
Support input/output in vector registers of s390x inline assembly (under asm_experimental_reg feature)

This extends currently clobber-only vector registers (`vreg`) support to allow passing `#[repr(simd)]` types, floats (f32/f64/f128), and integers (i32/i64/i128) as input/output.

This is unstable and gated under new `#![feature(asm_experimental_reg)]` (tracking issue: https://github.com/rust-lang/rust/issues/133416). If the feature is not enabled, only clober is supported as before.

| Architecture | Register class | Target feature | Allowed types |
| ------------ | -------------- | -------------- | -------------- |
| s390x | `vreg` | `vector` | `i32`, `f32`, `i64`, `f64`, `i128`, `f128`, `i8x16`, `i16x8`, `i32x4`, `i64x2`, `f32x4`, `f64x2` |

This matches the list of types that are supported by the vector registers in LLVM:
https://github.com/llvm/llvm-project/blob/llvmorg-19.1.0/llvm/lib/Target/SystemZ/SystemZRegisterInfo.td#L301-L313

In addition to `core::simd` types and floats listed above, custom `#[repr(simd)]` types of the same size and type are also allowed. All allowed types other than i32/f32/i64/f64/i128, and relevant target features are currently unstable.

Currently there is no SIMD type for s390x in `core::arch`, but this is tracked in https://github.com/rust-lang/rust/issues/130869.

cc https://github.com/rust-lang/rust/issues/130869 about vector facility support in s390x
cc https://github.com/rust-lang/rust/issues/125398 & https://github.com/rust-lang/rust/issues/116909 about f128 support in asm

`@rustbot` label +O-SystemZ +A-inline-assembly
2024-11-25 07:01:37 +01:00
Matthias Krüger
c5230d1148 Rollup merge of #131523 - nbdd0121:asm, r=compiler-errors
Fix asm goto with outputs and move it to a separate feature gate

Tracking issue: #119364

This PR addresses 3 aspects of asm goto with outputs:
* Codegen is fixed. My initial implementation has an oversight which cause the output to be only stored in fallthrough path, but not in label blocks.
* Outputs can now be used with `options(noreturn)` if a label block is given.
* All of this is moved to a new feature gate, because we likely want to stabilise `asm_goto` before asm goto with outputs.

`@rustbot` labels: +A-inline-assembly +F-asm
2024-11-25 07:01:37 +01:00
Nicholas Nethercote
16a39bb7ca Streamline lex_token_trees error handling.
- Use iterators instead of `for` loops.
- Use `if`/`else` instead of `match`.
2024-11-25 16:10:55 +11:00
Nicholas Nethercote
4cd2840f00 Clean up c_or_byte_string.
- Rename a misleading local `mk_kind` as `single_quoted`.
- Use `fn` for all three arguments, for consistency.
2024-11-25 16:10:55 +11:00
Nicholas Nethercote
11c96cfd94 Improve strip_shebang testing.
It's currently a bit ad hoc. This commit makes it more methodical, with
pairs of match/no-match tests for all the relevant cases.
2024-11-25 16:10:55 +11:00
Nicholas Nethercote
ba1a1ddc3f Fix some formatting.
Must be one of those cases where the function is too long and rustfmt
bails out.
2024-11-25 16:10:55 +11:00
Nicholas Nethercote
593cf680aa Split Lexer::bump.
It has two different ways of being called.
2024-11-25 16:10:55 +11:00
Nicholas Nethercote
98777b4c49 Merge TokenTreesReader into StringReader.
There is a not-very-useful layering in the lexer, where
`TokenTreesReader` contains a `StringReader`. This commit combines them
and names the result `Lexer`, which is a more obvious name for it.

The methods of `Lexer` are now split across `mod.rs` and `tokentrees.rs`
which isn't ideal, but it doesn't seem worth moving a bunch of code to
avoid it.
2024-11-25 16:10:55 +11:00
Michael Goulet
d26e29ff3a Tweak parameter mismatch explanation to not say unknown 2024-11-25 03:04:07 +00:00
Michael Goulet
15dff274d0 Actually use placeholder regions for trait method late bound regions in collect_return_position_impl_trait_in_trait_tys 2024-11-24 23:11:49 +00:00
Nadrieril
962c0140c7 parse guard patterns
Co-authored-by: Max Niederman <max@maxniederman.com>
2024-11-24 19:42:33 +01:00
Max Niederman
9b8bfed73b add guard pattern AST node 2024-11-24 18:08:20 +01:00
Max Niederman
35bbc45f16 refactor pat parser method names/doc-comments to agree with RFC 3637 2024-11-24 18:08:20 +01:00
Max Niederman
f8e50d8736 add guard_patterns unstable feature, without unstable book chapter for now 2024-11-24 18:08:09 +01:00
许杰友 Jieyou Xu (Joe)
c50e19b69c Rollup merge of #133384 - RalfJung:vector-abi-check-tests, r=jieyouxu
add a test for target-feature-ABI warnings in closures and when calling extern fn

Also update the comment regarding the inheritance of target features into closures, to make it more clear that we really shouldn't do this right now.
2024-11-25 00:39:06 +08:00
许杰友 Jieyou Xu (Joe)
8d20d71256 Rollup merge of #133297 - DianQK:embed-bitcode-ios, r=nikic
Remove legacy bitcode for iOS

Follow #117364.
2024-11-25 00:39:05 +08:00
许杰友 Jieyou Xu (Joe)
6b07382b59 Rollup merge of #133105 - bvanjoi:issue-132743, r=petrochenkov
only store valid proc macro item for doc link

Fixes #132743

The definition item can be detected if it is exported in the doc, so store these items rather than skipping.

r? `@petrochenkov`
2024-11-25 00:39:04 +08:00
Taiki Endo
736c397f41 Fix clobber_abi in RV32E and RV64E inline assembly 2024-11-25 00:36:22 +09:00
Gary Guo
0178ba2c25 Make asm_goto_with_outputs a separate feature gate 2024-11-24 15:24:01 +00:00
Gary Guo
73f8309300 Support use of asm goto with outputs and options(noreturn)
When labels are present, the `noreturn` option really means that asm block
won't fallthrough -- if labels are present, then outputs can still be
meaningfully used.
2024-11-24 14:18:10 +00:00
Gary Guo
b8df869ebb Fix asm goto with outputs
When outputs are used together with labels, they are considered
to be written for all destinations, not only when falling through.
2024-11-24 14:18:10 +00:00
Zalathar
2748009aad coverage: Identify source files by ID, not by interned filename 2024-11-24 23:46:41 +11:00
Zalathar
b9fb1a69d2 coverage: Store coverage source regions as Span until codegen 2024-11-24 23:46:39 +11:00
Taiki Endo
c024d8ccdf Make s390x non-clobber-only vector register support unstable 2024-11-24 21:42:22 +09:00
Zalathar
87fe7def12 coverage: Rename some FFI fields from span to cov_span
This will avoid confusion with actual `Span` spans.
2024-11-24 23:29:02 +11:00
Zalathar
619a272612 coverage: Ignore functions that end up having no mappings
A used function with no mappings has historically indicated a bug, but that
will no longer be the case after moving some fallible span-processing steps
into codegen.
2024-11-24 23:28:02 +11:00
bors
f5d1857685 Auto merge of #133415 - matthiaskrgr:rollup-n1ivyd5, r=matthiaskrgr
Rollup of 6 pull requests

Successful merges:

 - #133300 (inject_panic_runtime(): Avoid double negation for 'any non rlib')
 - #133301 (Add code example for `wrapping_neg` method for signed integers)
 - #133371 (remove is_trivially_const_drop)
 - #133389 (Stabilize `const_float_methods`)
 - #133398 (rustdoc: do not call to_string, it's already impl Display)
 - #133405 (tidy: Distinguish between two different meanings of "style file")

r? `@ghost`
`@rustbot` modify labels: rollup
2024-11-24 10:21:07 +00:00
Zalathar
972663d8ec Allow injecting a profiler runtime into #![no_core] crates
Now that the profiler runtime is itself `#![no_core]`, it can be a dependency
of other no_core crates, including core.
2024-11-24 21:12:40 +11:00
Matthias Krüger
5d1c99275d Rollup merge of #133371 - RalfJung:is_trivially_const_drop, r=compiler-errors
remove is_trivially_const_drop

I'm not sure this still brings any perf benefits, so let's benchmark this.

r? `@compiler-errors`
2024-11-24 11:08:19 +01:00
Matthias Krüger
4ad97f2a9a Rollup merge of #133300 - Enselic:build-std-instrument-coverage, r=jieyouxu
inject_panic_runtime(): Avoid double negation for 'any non rlib'

<details>

<summary>This PR originally did more things .Click to expand to see.</summary>

By not trying to inject a profiler runtime when only building an rlib. This logic already exists for the panic runtime.

This makes

    RUSTFLAGS="-Cinstrument-coverage" cargo build -Zbuild-std=std,profiler_builtins

work. Note that you probably also need
`RUST_COMPILER_RT_FOR_PROFILER=$src/llvm-project/compiler-rt` in your environment.

cc #79401

# Demonstration

Before this fix you get these errors:

```console
$ rm -rf target ; RUST_COMPILER_RT_FOR_PROFILER=/home/martin/src/llvm-project/compiler-rt RUSTFLAGS="-Cinstrument-coverage" cargo +nightly build --release -Zbuild-std=std,profiler_builtins
error: `profiler_builtins` crate (required by compiler options) is not compatible with crate attribute `#![no_core]`
error[E0152]: found duplicate lang item `manually_drop`
    = note: first definition in `core` loaded from /home/martin/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libcore-d453bab70303062c.rlib
    = note: second definition in the local crate (`core`)
```

With the fix the build succeeds:

```console
$ rm -rf target ; RUST_COMPILER_RT_FOR_PROFILER=/home/martin/src/llvm-project/compiler-rt RUSTFLAGS="-Cinstrument-coverage" cargo +stage1 build --release -Zbuild-std=std,profiler_builtins
    Finished `release` profile [optimized] target(s) in 45.57s
```

And we can check code coverage. My example program looks like this:

```rs
fn main() {
    if std::env::args_os().nth(1) == Some("write-file".into()) {
        std::fs::write("hello.txt", "Hello, world!").unwrap();
    } else {
        println!("Hello, world!");
    }
}
```

when the program prints to stdout:

```
$ LLVM_PROFILE_FILE=stdout.profraw ./target/release/hello-world
Hello, world!
```

we can see that `fs::write()` is not being used (note the `0`'s):

```console
$ /home/martin/src/rust/build/x86_64-unknown-linux-gnu/stage1/lib/rustlib/x86_64-unknown-linux-gnu/bin/llvm-profdata merge -sparse stdout.profraw -o stdout.profdata
$ /home/martin/src/rust/build/x86_64-unknown-linux-gnu/stage1/lib/rustlib/x86_64-unknown-linux-gnu/bin/llvm-cov show target/release/hello-world --sources /home/martin/src/rust/build/x86_64-unknown-linux-gnu/stage1/lib/rustlib/src/rust/library/std/src/fs.rs --instr-profile stdout.profdata --color | grep -A 3 'pub fn write(&mut self, write: b
ool) -> &mut Self {'
 1357|      0|    pub fn write(&mut self, write: bool) -> &mut Self {
 1358|      0|        self.0.write(write);
 1359|      0|        self
 1360|      0|    }
```

but when we print to a file:

```console
$ LLVM_PROFILE_FILE=file.profraw ./target/release/hello-world write-file
```

the code coverage shows `fs::write()` as being used (note the `1`'s):

```console
$ /home/martin/src/rust/build/x86_64-unknown-linux-gnu/stage1/lib/rustlib/x86_64-unknown-linux-gnu/bin/llvm-profdata merge -sparse file.profraw -o file.profdata
$ /home/martin/src/rust/build/x86_64-unknown-linux-gnu/stage1/lib/rustlib/x86_64-unknown-linux-gnu/bin/llvm-cov show target/release/hello-world --sources /home/martin/src/rust/build/x86_64-unknown-linux-gnu/stage1/lib/rustlib/src/rust/library/std/src/fs.rs --instr-profile file.profdata --color | grep -A 3 'pub fn write(&mut self, write: bool) -> &mut Self {'
 1357|      1|    pub fn write(&mut self, write: bool) -> &mut Self {
 1358|      1|        self.0.write(write);
 1359|      1|        self
 1360|      1|    }
```
</summary>
2024-11-24 11:08:18 +01:00
Ralf Jung
5d42f64ad2 target check_consistency: ensure target feature string makes some basic sense 2024-11-24 09:55:07 +01:00
Ralf Jung
b9a0e57b0c add a test for target-feature-ABI warnings in closures 2024-11-24 09:20:10 +01:00
Ralf Jung
6484420e5d the emscripten OS no longer exists on non-wasm targets 2024-11-24 09:16:59 +01:00
DianQK
7cc5feea4d Remove forces_embed_bitcode 2024-11-24 15:51:47 +08:00
DianQK
3a23669787 embed-bitcode is no longer used in iOS 2024-11-24 15:51:47 +08:00
bors
ab3cf268b5 Auto merge of #132791 - tyilo:big-file-fail-fast, r=compiler-errors
rustc: Fail fast when compiling a source file larger than 4 GiB

Currently if you try to compile a file that is larger than 4 GiB, `rustc` will first read the whole into memory before failing.

If we can read the metadata of the file, we can fail before reading the file.
2024-11-24 07:37:32 +00:00
Michael Goulet
28970a2cb0 Simplify array length mismatch error reporting 2024-11-24 03:32:11 +00:00
Zalathar
e6f1ca6752 Clarify logic for whether a profiler runtime is needed 2024-11-24 11:35:32 +11:00
Mads Marquart
6bbf832cf2 Remove unnecessary 0 link args optimization 2024-11-24 01:23:19 +01:00
Mads Marquart
cb6f8fa422 Support rpath with -Clinker-flavor=ld
Using `cc_args` panics when using `-Clinker-flavor=ld`, because the
arguments are in a form tailored for `-Clinker-flavor=gcc`.

So instead, we use `link_args` and let that wrap the arguments with the
appropriate `-Wl` or `-Xlinker` when needed.
2024-11-24 01:20:29 +01:00
Mads Marquart
45791dde8e Support linker arguments that contain commas 2024-11-24 01:20:28 +01:00