Commit graph

8191 commits

Author SHA1 Message Date
bors
c0de313e82 Auto merge of #2985 - RalfJung:retag-fields, r=saethlin
make full field retagging the default

The 'scalar' field retagging mode is clearly a hack -- it mirrors details of the codegen backend and how various structs are represented in LLVM. This means whether code has UB or not depends on surprising aspects, such as whether a struct has 2 or 3 (non-zero-sized) fields. Now that both hashbrown and scopeguard have released fixes to be compatible with field retagging, I think it is time to enable full field retagging by default.

`@saethlin` do you have an idea of how much fallout enabling full field retagging by default will cause? Do you have objections to enabling it by default?

Fixes https://github.com/rust-lang/miri/issues/2528
2023-07-21 16:32:44 +00:00
Ralf Jung
3cdd2922cb ask people to reach out if we declare too much UB 2023-07-21 18:31:48 +02:00
Ralf Jung
b8b92db1ee SB: track whether a retag occurred nested inside a field 2023-07-21 16:27:26 +02:00
Ralf Jung
245c52e780 make full field retagging the default 2023-07-21 16:08:43 +02:00
Oli Scherer
44e21503a8 Double check that hidden types match the expected hidden type 2023-07-21 13:19:36 +00:00
Moulins
39cfe70e4f CTFE: move target_{i, u}size_{min, max) to rustc_abi::TargetDataLayout 2023-07-21 03:31:47 +02:00
Moulins
cb8b1d1bc9 add naive_layout_of query 2023-07-21 03:31:45 +02:00
lcnr
fdaec57a28 XSimplifiedType to SimplifiedType::X 2023-07-20 11:05:52 +02:00
The Miri Conjob Bot
7b5b87dee1 Merge from rustc 2023-07-20 06:38:14 +00:00
The Miri Conjob Bot
dfb552e37e Preparing for merge from rustc 2023-07-20 06:32:05 +00:00
bors
0646a5d1aa Auto merge of #113622 - RickleAndMortimer:issue-113184-fix, r=oli-obk
add links to query documentation for E0391

This PR adds links to https://rustc-dev-guide.rust-lang.org/overview.html#queries and https://rustc-dev-guide.rust-lang.org/query.html for the rustc --explain E0391 and within the compiler error itself.

Fixes: #113184
2023-07-20 03:18:41 +00:00
Esteban Küber
8eb5843a59 On nightly, dump ICE backtraces to disk
Implement rust-lang/compiler-team#578.

When an ICE is encountered on nightly releases, the new rustc panic
handler will also write the contents of the backtrace to disk. If any
`delay_span_bug`s are encountered, their backtrace is also added to the
file. The platform and rustc version will also be collected.
2023-07-19 14:10:07 +00:00
nxya
a54a66830d moved note as unspanned note, moved note to the bottom of the msg 2023-07-18 21:53:34 -04:00
Weihang Lo
3c7469eb5c
Update cargo 2023-07-18 19:45:12 +01:00
bors
8d361cbd91 Auto merge of #112374 - chenx97:better-mips64r6, r=jackh726
add mips64r6 and mips32r6 as target_arch values

This PR introduces `"mips32r6"` and `"mips64r6"` as valid `target_arch` values, and would be the arch value used by Tier-3 targets `mipsisa32r6-unknown-linux-gnu`, `mipsisa32r6el-unknown-linux-gnu`, `mipsisa64r6-unknown-linux-gnuabi64` and `mipsisa64r6el-unknown-linux-gnuabi64`.

This PR was inspired by `rustix` attempting to link traditional mips64el objects with mips64r6el objects when building for mips64r6, even though `rustix` recently removed outline assembly support. This is because currently this target's `target_arch` is `"mips64"` and rustix has its respective assembly implementation as well as a pre-compiled little-endian static library prepared for mips64el, a tier-2 target with the same `target_arch`. After some [discussions on zulip](https://rust-lang.zulipchat.com/#narrow/stream/233931-t-compiler.2Fmajor-changes/topic/Add.20New.20Values.20To.20MIPS_ALLOWED_FEATURES.20compiler-team.23595), I decided to treat mips64r6 as an independent architecture from Rust's POV, since these two architectures are incompatible anyway.

This PR is now waiting for `libc` to release a new version with [support](https://github.com/rust-lang/libc/pull/3268) for these `target_arch` values. It is not expected to introduce changes to any other target, especially Tier-1 and Tier-2 targets.

This PR has its corresponding [MCP](https://github.com/rust-lang/compiler-team/issues/632) approved.
2023-07-18 13:42:14 +00:00
nxya
5f68a5d204 fix miri test with links to query documentation 2023-07-18 09:20:25 -04:00
bors
f0580df0d5 Auto merge of #113706 - Alexendoo:compiletest-backslash-re, r=oli-obk
Fix compiletest windows path finding with spaces

With `(?x)` enabled spaces are ignored unless you escape them, so the space wasn't being added to the character class

I don't think this makes any difference to the current test suite, but it could save someone a headache in the future
2023-07-18 11:33:02 +00:00
chenx97
d3727148a0 support for mips32r6 as a target_arch value 2023-07-18 18:58:18 +08:00
chenx97
c6e03cd951 support for mips64r6 as a target_arch value 2023-07-18 18:58:18 +08:00
Ralf Jung
7bee1c8616 ignore test on apple 2023-07-18 11:26:25 +02:00
Ralf Jung
6ba56ac7b9 fix clippy warnings 2023-07-18 11:25:17 +02:00
Ralf Jung
f5aa3131b4 make './miri toolchain' work even if we cannot write to rustup dir 2023-07-18 11:25:06 +02:00
The Miri Conjob Bot
0c27c2e605 Merge from rustc 2023-07-18 07:04:44 +00:00
The Miri Conjob Bot
7948f1ac47 Preparing for merge from rustc 2023-07-18 06:58:26 +00:00
Jakub Beránek
9c373e3e5b
Try to build LLVM without LTO 2023-07-18 08:45:19 +02:00
bors
6b9236ed5a Auto merge of #113801 - compiler-errors:iter-instantiated, r=oli-obk
Rename `arg_iter` to `iter_instantiated`

`arg_iter` doesn't make sense, and doesn't really indicate what it's doing (returning an iterator that ~~substitutes~~ instantiates its elements).

`iter_instantiated_copied` is kinda awkward but i don't really wanna bikeshed it.

r? `@oli-obk`
2023-07-18 05:33:23 +00:00
Michael Goulet
05f6890b3e Rename arg_iter to iter_instantiated 2023-07-17 21:04:12 +00:00
bors
1787f31290 Auto merge of #113720 - eduardosm:miri-target-feature, r=RalfJung,oli-obk
miri: fail when calling a function that requires an unavailable target feature

miri will report an UB when calling a function that has a `#[target_feature(enable = ...)]` attribute is called and the required feature is not available.

"Available features" are the same that `is_x86_feature_detected!` (or equivalent) reports to be available during miri execution (which can be enabled or disabled with the `-C target-feature` flag).
2023-07-17 19:57:37 +00:00
Jakub Beránek
50d117ee7d
Resolve correct archive version name in opt-dist 2023-07-17 21:24:43 +02:00
bors
4eaad89dce Auto merge of #113686 - flip1995:clippyup, r=Manishearth
Update Clippy

r? `@Manishearth`
2023-07-17 18:04:55 +00:00
Ralf Jung
bdc3ed509c bootstrap: use git merge-base for LLVM CI download logic 2023-07-17 16:53:10 +02:00
bors
b3c7a7e749 Auto merge of #113791 - lnicola:sync-from-ra, r=lnicola
⬆️ `rust-analyzer`

r? `@ghost`
2023-07-17 13:54:44 +00:00
Laurențiu Nicola
d35f6c6c11 Merge commit '37f84c101b' into sync-from-ra 2023-07-17 16:49:15 +03:00
Matthias Krüger
e31ebae35a
Rollup merge of #113535 - jonathanpallant:sparc-bare-metal, r=jackh726
Add a sparc-unknown-none-elf target.

# `sparc-unknown-none-elf`

**Tier: 3**

Rust for bare-metal 32-bit SPARC V7 and V8 systems, e.g. the Gaisler LEON3.

## Target maintainers

- Jonathan Pallant, `jonathan.pallant@ferrous-systems.com`, https://ferrous-systems.com

## Requirements

> Does the target support host tools, or only cross-compilation?

Only cross-compilation.

> Does the target support std, or alloc (either with a default allocator, or if the user supplies an allocator)?

Only tested with `libcore` but I see no reason why you couldn't also support `liballoc`.

> Document the expectations of binaries built for the target. Do they assume
specific minimum features beyond the baseline of the CPU/environment/etc? What
version of the OS or environment do they expect?

Tested by linking with a standard SPARC bare-metal toolchain - specifically I used the [BCC2] toolchain from Gaisler (both GCC and clang variants, both pre-compiled for x64 Linux and compiling my own SPARC GCC from source to run on `aarch64-apple-darwin`).

The target is set to use the lowest-common-denominator `SPARC V7` architecture (yes, they started at V7 - see [Wikipedia](https://en.wikipedia.org/wiki/SPARC#History)).

[BCC2]: https://www.gaisler.com/index.php/downloads/compilers

> Are there notable `#[target_feature(...)]` or `-C target-feature=` values that
programs may wish to use?

`-Ctarget-cpu=v8` adds the instructions added in V8.

`-Ctarget-cpu=leon3` adds the V8 instructions and sets up scheduling to suit the Gaisler LEON3.

> What calling convention does `extern "C"` use on the target?

I believe this is defined by the SPARC architecture reference manuals and V7, V8 and V9 are all compatible.

> What format do binaries use by default? ELF, PE, something else?

ELF

## Building the target

> If Rust doesn't build the target by default, how can users build it? Can users
just add it to the `target` list in `config.toml`?

Yes. I did:

```toml
target = ["aarch64-apple-darwin", "sparc-unknown-none-elf"]
```

## Building Rust programs

> Rust does not yet ship pre-compiled artifacts for this target. To compile for
this target, you will either need to build Rust with the target enabled (see
"Building the target" above), or build your own copy of `core` by using
`build-std` or similar.

Correct.

## Testing

> Does the target support running binaries, or do binaries have varying
expectations that prevent having a standard way to run them?

No - it's a bare metal platform.

> If users can run binaries, can they do so in some common emulator, or do they need native
hardware?

But if you use [BCC2] as the linker, you get default memory map suitable for the LEON3, and a default BSP for the LEON3, and so you can run the binaries in the `tsim-leon3` simulator from Gaisler.

```console
$ cat .cargo/config.toml | grep runner
runner = "tsim-leon3 -c sim-commands.txt"
$ cat sim-commands.txt
run
quit
$ cargo +sparcrust run --targe=sparc-unknown-none-elf
   Compiling sparc-demo-rust v0.1.0 (/work/sparc-demo-rust)
    Finished dev [unoptimized + debuginfo] target(s) in 3.44s
     Running `tsim-leon3 -c sim-commands.txt target/sparc-unknown-none-elf/debug/sparc-demo-rust`

 TSIM3 LEON3 SPARC simulator, version 3.1.9 (evaluation version)

 Copyright (C) 2023, Frontgrade Gaisler - all rights reserved.
 This software may only be used with a valid license.
 For latest updates, go to https://www.gaisler.com/
 Comments or bug-reports to support@gaisler.com

 This TSIM evaluation version will expire 2023-11-28

Number of CPUs: 2
system frequency: 50.000 MHz
icache: 1 * 4 KiB, 16 bytes/line (4 KiB total)
dcache: 1 * 4 KiB, 16 bytes/line (4 KiB total)
Allocated 8192 KiB SRAM memory, in 1 bank at 0x40000000
Allocated 32 MiB SDRAM memory, in 1 bank at 0x60000000
Allocated 8192 KiB ROM memory at 0x00000000
section: .text, addr: 0x40000000, size: 104400 bytes
section: .rodata, addr: 0x400197d0, size: 15616 bytes
section: .data, addr: 0x4001d4d0, size: 1176 bytes
read 1006 symbols

  Initializing and starting from 0x40000000
Hello, this is Rust!
PANIC: PanicInfo { payload: Any { .. }, message: Some(I am a panic), location: Location { file: "src/main.rs", line: 33, col: 5 }, can_unwind: true }

  Program exited normally on CPU 0.
```

> Does the target support running the Rust testsuite?

I don't think so, the testsuite requires `libstd` IIRC.

## Cross-compilation toolchains and C code

> Does the target support C code?

Yes.

> If so, what toolchain target should users use to build compatible C code? (This may match the target triple, or it may be a toolchain for a different target triple, potentially with specific options or caveats.)

I suggest [BCC2] from Gaisler. It comes in both GCC and Clang variants.
2023-07-17 12:58:53 +02:00
Philipp Krones
8ca13e8338
Another fix for incorrect_impls 2023-07-17 10:22:49 +02:00
Philipp Krones
561303d74c
Merge commit 'd9c24d1b1e' into clippyup 2023-07-17 10:22:32 +02:00
Ralf Jung
75da07bf28 link to a definition of soundness 2023-07-16 15:51:46 +02:00
Ralf Jung
d537a7aaa2 clarify that we do not prove soundness 2023-07-16 13:47:16 +02:00
bors
0548274b4b Auto merge of #2981 - RalfJung:style, r=RalfJung
style checks: use latest rustc for cron job
2023-07-16 10:59:18 +00:00
Ralf Jung
8480847ed8 style checks: use latest rustc for cron job 2023-07-16 12:58:47 +02:00
Jakub Beránek
e04b915a1d Use log groups in opt-dist
Some of the output was quite verbose in CI logs, this should help with that.
2023-07-16 10:36:13 +02:00
The Miri Conjob Bot
2e4a190387 Merge from rustc 2023-07-16 06:33:33 +00:00
The Miri Conjob Bot
648d74a068 Preparing for merge from rustc 2023-07-16 06:24:54 +00:00
Eduardo Sánchez Muñoz
b5fde0dae0 miri: fail when calling a function that requires an unavailable target feature
miri will report an UB when calling a function that has a `#[target_feature(enable = ...)]` attribute is called and the required feature is not available.

"Available features" are the same that `is_x86_feature_detected!` (or equivalent) reports to be available during miri execution (which can be enabled or disabled with the `-C target-feature` flag).
2023-07-16 00:23:17 +02:00
Matthias Krüger
e76ae3e4c5
Rollup merge of #113644 - jyn514:bootstrap-cleanups, r=albertlarsan68
misc bootstrap cleanups

- rename `detail_exit_macro` to `exit`
- remove unnecessary `Builder::new_standalone` function
- support `x suggest` with build-metrics
2023-07-15 19:42:51 +02:00
jyn
3e306c2ddb Add track_caller to builder.msg
this makes the panics on nested GHA groups more useful
2023-07-14 17:32:05 -05:00
jyn
d3cdf27184 Add even more GHA log groups
This also adds a dynamic check that we don't emit nested groups, since GHA currently doesn't support them.
2023-07-14 17:27:20 -05:00
Alex Macleod
1ce61836dc Fix compiletest windows path finding with spaces 2023-07-14 21:32:44 +00:00
Matthias Krüger
97c73b6ffc
Rollup merge of #113699 - RalfJung:miri, r=RalfJung
update Miri

This fixes a pretty nasty bug in the tag GC.

r? ghost
2023-07-14 19:33:30 +02:00
Matthias Krüger
dae9e40213
Rollup merge of #113685 - Kobzol:opt-dist-binary-sizes, r=Mark-Simulacrum
Print artifact sizes in `opt-dist`

The Python PGO script printed a nice table of artifact sizes (`librustc_driver.so`, `libLLVM.so`, ...) at the end of the CI run, which was useful to quickly see the sizes of important files. I forgot to port this functionality into the Rust (`opt-dist`) version in https://github.com/rust-lang/rust/pull/112235. This PR fixes that.

r? bootstrap
2023-07-14 19:33:28 +02:00