Commit graph

298901 commits

Author SHA1 Message Date
ismailarilik
2426dbcde2 Handle rustc_middle cases of rustc::potential_query_instability lint 2025-05-05 16:36:04 +03:00
ismailarilik
59aaecbbf9 Handle rustc_middle cases of rustc::potential_query_instability lint 2025-05-05 16:36:04 +03:00
Vishruth-Thimmaiah
63e7c7ece3
fix: negative nums in concat! expansion 2025-05-05 19:00:24 +05:30
joboet
84bb0f07e6
std: stop using TLS in signal handler
TLS is not async-signal-safe, making its use in the signal handler used to detect stack overflows unsound (c.f. #133698). POSIX however lists two thread-specific identifiers that can be obtained in a signal handler: the current `pthread_t` and the address of `errno`. Since `pthread_equal` is not AS-safe, `pthread_t` should be considered opaque, so for our purposes, `&errno` is the only option. This however works nicely: we can use the address as a key into a map that stores information for each thread. This PR uses a `BTreeMap` protected by a spin lock to hold the guard page address and thread name and thus fixes #133698.
2025-05-05 15:18:52 +02:00
Lukas Wirth
b858b97722
Merge pull request #19747 from Veykril/push-kqxvxrxozswr
fix: Fix `move_bounds` assists not working for lifetimes
2025-05-05 13:18:20 +00:00
Michael Goulet
fcb4ef584d Rename Instance::new to Instance::new_raw and add a note that it is raw 2025-05-05 13:17:35 +00:00
Michael Goulet
5930cd904e Rename Instance::new to Instance::new_raw and add a note that it is raw 2025-05-05 13:17:35 +00:00
Michael Goulet
afaedbb29b Rename Instance::new to Instance::new_raw and add a note that it is raw 2025-05-05 13:17:35 +00:00
Michael Goulet
833c212b81 Rename Instance::new to Instance::new_raw and add a note that it is raw 2025-05-05 13:17:35 +00:00
Michael Goulet
3a1ee645ca Resolve instance for SymFn in global/naked asm 2025-05-05 13:17:35 +00:00
Ralf Jung
4b8f88b251
Merge pull request #4310 from RalfJung/addr-space-conservation
alloc_addresses: when we are running out of addresses, start reusing more aggressively
2025-05-05 13:11:48 +00:00
Ralf Jung
84b3142e27
Merge pull request #4309 from RalfJung/both-borrows-tests
move tests that are identical between SB and TB to shared files
2025-05-05 13:10:12 +00:00
Lukas Wirth
845106e0f9 fix: Fix move_bounds assists not working for lifetimes 2025-05-05 15:07:36 +02:00
Ralf Jung
5c7f1d76cb alloc_addresses: when we are running out of addresses, start reusing more aggressively 2025-05-05 14:46:45 +02:00
Ralf Jung
aec861b5ae consistent folder naming: stacked-borrows -> stacked_borrows 2025-05-05 14:44:37 +02:00
Alice Ryhl
4b58c5034a Make -Zfixed-x18 into a target modifier 2025-05-05 12:42:27 +00:00
Lukas Wirth
d5c97d355b
Merge pull request #19746 from Veykril/push-swvuyqwwplrt
fix: Fix proc-macro API creating malformed negative literals
2025-05-05 12:21:23 +00:00
Lukas Wirth
4f0c28e1dc fix: Fix proc-macro API creating malformed negative literals 2025-05-05 14:10:42 +02:00
Ralf Jung
70ef2504b9
Merge pull request #4306 from yoctocell/fix-unsafecell-inside-box
Tree Borrows: Correctly handle interior mutable data in `Box`
2025-05-05 11:58:34 +00:00
bors
243c5a35e1 Auto merge of #140453 - Zoxc:next-disambiguator, r=oli-obk
Remove global `next_disambiguator` state and handle it with a `DisambiguatorState` type

This removes `Definitions.next_disambiguator` as it doesn't guarantee deterministic def paths when `create_def` is called in parallel. Instead a new `DisambiguatorState` type is passed as a mutable reference to `create_def` to help create unique def paths. `create_def` calls with distinct  `DisambiguatorState` instances must ensure that that the def paths are unique without its help.

Anon associated types did rely on this global state for uniqueness and are changed to use (method they're defined in + their position in the method return type) as the `DefPathData` to ensure uniqueness. This also means that the method they're defined in appears in error messages, which is nicer.

`DefPathData::NestedStatic` is added to use for nested data inside statics instead of reusing `DefPathData::AnonConst` to avoid conflicts with those.

cc `@oli-obk`
2025-05-05 11:50:43 +00:00
Ralf Jung
3f0d24ad4c move tests that are identical between SB and TB to shared files 2025-05-05 13:49:18 +02:00
Lukas Wirth
53881efacb minor: Add more proc-macro tests for parsing negative literals 2025-05-05 13:44:45 +02:00
dianne
7e4f6d3a30 update unstable book 2025-05-05 04:29:33 -07:00
dianne
17bb4bbc86 always peel &mut, to allow matching on &mut str 2025-05-05 04:29:33 -07:00
dianne
fe98130e0f match ergonomics for string and byte string literal patterns 2025-05-05 04:10:49 -07:00
onur-ozkan
a8f7fd1d26 update cc_detect tests
Signed-off-by: onur-ozkan <work@onurozkan.dev>
2025-05-05 10:35:46 +00:00
Lukas Wirth
ad6f9f79fe
Merge pull request #19745 from Veykril/push-rnqulnqvltro
minor: Add a mbe test for parsing negative literals
2025-05-05 10:21:54 +00:00
joboet
7845c011dd
collect all Fuchsia bindings into the fuchsia module
The Fuchsia bindings are currently spread out across multiple modules in `sys/pal/unix` leading to unnecessary duplication. This PR moves all of these definitions into `sys::pal::unix::fuchsia` and additionally:
* deduplicates the definitions
* makes the error names consistent
* marks some extern functions as safe
* removes unused items (there's no need to maintain these bindings if we're not going to use them)
* removes the documentation for the definitions (contributors should always consult the platform documentation, duplicating that here is just an extra maintenance burden)
2025-05-05 12:16:40 +02:00
Lukas Wirth
c1b7b968e8 minor: Add a mbe test for parsing negative literals 2025-05-05 12:10:48 +02:00
Lukas Wirth
a6e71bafcb
Merge pull request #19740 from vishruth-thimmaiah/unwrap_path_type
feat: add an assist to unwrap a type with a generic arg
2025-05-05 09:37:14 +00:00
bors
0eb0b8cb67 Auto merge of #134767 - Bryanskiy:dylibs-3, r=petrochenkov
Initial support for dynamically linked crates

This PR is an initial implementation of [rust-lang/rfcs#3435](https://github.com/rust-lang/rfcs/pull/3435) proposal.
### component 1: interface generator

Interface generator - a tool for generating a stripped version of crate source code. The interface is like a C header, where all function bodies are omitted. For example, initial crate:

```rust
#[export]
#[repr(C)]
pub struct S {
   pub x: i32
}
#[export]
pub extern "C" fn foo(x: S) {
   m1::bar(x);
}

pub fn bar(x: crate::S) {
    // some computations
}
```

generated interface:

```rust
#[export]
#[repr(C)]
pub struct S {
    pub x: i32,
}

#[export]
pub extern "C" fn foo(x: S);

pub fn bar(x: crate::S);
```

The interface generator was implemented as part of the pretty-printer. Ideally interface should only contain exportable items, but here is the first problem:
-  pass for determining exportable items relies on privacy information, which is totally available only in HIR
- HIR pretty-printer uses pseudo-code(at least for attributes)

So, the interface generator was implemented in AST. This has led to the fact that non-exportable items cannot be filtered out, but I don't think this is a major issue at the moment.

To emit an interface use a new `sdylib` crate type which is basically the same as `dylib`, but it doesn't contain metadata, and also produces the interface as a second artifact. The current interface name is `lib{crate_name}.rs`.
#### Why was it decided to use a design with an auto-generated interface?

One of the main objectives of this proposal is to allow building the library and the application with different compiler versions. This requires either a metadata format compatible across rustc versions or some form of a source code. The option with a stable metadata format has not been investigated in detail, but it is not part of RFC either. Here is the the related discussion: https://github.com/rust-lang/rfcs/pull/3435#discussion_r1202872373

Original proposal suggests using the source code for the dynamic library and all its dependencies. Metadata is obtained from `cargo check`. I decided to use interface files since it is more or less compatible with the original proposal, but also allows users to hide the source code.
##### Regarding the design with interfaces

in Rust, files generally do not have a special meaning, unlike C++. A translation unit i.e. a crate is not a single file, it consists of modules. Modules, in turn, can be declared either in one file or divided into several. That's why the "interface file" isn't a very coherent concept in Rust. I would like to avoid adding an additional level of complexity for users until it is proven necessary. Therefore, the initial plan was to make the interfaces completely invisible to users i. e. make them auto-generated. I also planned to put them in the dylib, but this has not been done yet. (since the PR is already big enough, I decided to postpone it)

There is one concern, though, which has not yet been investigated(https://github.com/rust-lang/rust/pull/134767#issuecomment-2736471828):

> Compiling the interface as pretty-printed source code doesn't use correct macro hygiene (mostly relevant to macros 2.0, stable macros do not affect item hygiene).  I don't have much hope for encoding hygiene data in any stable way, we should rather support a way for the interface file to be provided manually, instead of being auto-generated, if there are any non-trivial requirements.
### component 2: crate loader

When building dynamic dependencies, the crate loader searches for the interface in the file system, builds the interface without codegen and loads it's metadata. Routing rules for interface files are almost the same as for `rlibs` and `dylibs`. Firstly, the compiler checks `extern` options and then tries to deduce the path himself.

Here are the code and commands that corresponds to the compilation process:

```rust
// simple-lib.rs
#![crate_type = "sdylib"]

#[extern]
pub extern "C" fn foo() -> i32 {
    42
}
```

```rust
// app.rs
extern crate simple_lib;

fn main() {
    assert!(simple_lib::foo(), 42);
}
```

```
// Generate interface, build library.
rustc +toolchain1 lib.rs

// Build app. Perhaps with a different compiler version.
rustc +toolchain2 app.rs -L.
```

P.S. The interface name/format and rules for file system routing can be changed further.
### component 3: exportable items collector

Query for collecting exportable items. Which items are exportable is defined [here](https://github.com/m-ou-se/rfcs/blob/export/text/0000-export.md#the-export-attribute) .
### component 4: "stable" mangling scheme

The mangling scheme proposed in the RFC consists of two parts: a mangled item path and a hash of the signature.
#### mangled item path

For the first part of the symbol it has been decided to reuse the `v0` mangling scheme as it much less dependent on compiler internals compared to the `legacy` scheme.

The exception is disambiguators (https://doc.rust-lang.org/rustc/symbol-mangling/v0.html#disambiguator):

For example, during symbol mangling rustc uses a special index to distinguish between two impls of the same type in the same module(See `DisambiguatedDefPathData`). The calculation of this index may depend on private items, but private items should not affect the ABI. Example:

```rust
#[export]
#[repr(C)]
pub struct S<T>(pub T);

struct S1;
pub struct S2;

impl S<S1> {
    extern "C" fn foo() -> i32 {
        1
    }
}

#[export]
impl S<S2> {
    // Different symbol names can be generated for this item
    // when compiling the interface and source code.
    pub extern "C" fn foo() -> i32 {
        2
    }
}
```

In order to make disambiguation independent of the compiler version we can assign an id to each impl according to their relative order in the source code.

The second example is `StableCrateId` which is used to disambiguate different crates. `StableCrateId` consists of crate name, `-Cmetadata` arguments and compiler version. At the moment, I have decided to keep only the crate name, but a more consistent approach to crate disambiguation could be added in the future.

Actually, there are more cases where such disambiguation can be used. For instance, when mangling internal rustc symbols, but it also hasn't been investigated in detail yet.
#### hash of the signature

Exportable functions from stable dylibs can be called from safe code. In order to provide type safety, 128 bit hash with relevant type information is appended to the symbol ([description from RFC](https://github.com/m-ou-se/rfcs/blob/export/text/0000-export.md#name-mangling-and-safety)). For now, it includes:

- hash of the type name for primitive types
- for ADT types with public fields the implementation follows [this](https://github.com/m-ou-se/rfcs/blob/export/text/0000-export.md#types-with-public-fields) rules

`#[export(unsafe_stable_abi = "hash")]` syntax for ADT types with private fields is not yet implemented.

Type safety is a subtle thing here. I used the approach from RFC, but there is the ongoing research project about it. [https://rust-lang.github.io/rust-project-goals/2025h1/safe-linking.html](https://rust-lang.github.io/rust-project-goals/2025h1/safe-linking.html)

### Unresolved questions

Interfaces:
1. Move the interface generator to HIR and add an exportable items filter.
2. Compatibility of auto-generated interfaces and macro hygiene.
3. There is an open issue with interface files compilation: https://github.com/rust-lang/rust/pull/134767#issuecomment-2736471828
4. Put an interface into a dylib.

Mangling scheme:
1. Which information is required to ensure type safety and how should it be encoded? ([https://rust-lang.github.io/rust-project-goals/2025h1/safe-linking.html](https://rust-lang.github.io/rust-project-goals/2025h1/safe-linking.html))
2. Determine all other possible cases, where path disambiguation is used. Make it compiler independent.

We also need a semi-stable API to represent types. For example, the order of fields in the `VariantDef` must be stable. Or a semi-stable representation for AST, which ensures that the order of the items in the code is preserved.

There are some others, mentioned in the proposal.
2025-05-05 08:36:17 +00:00
Vishruth-Thimmaiah
77f7a9afb8
feat: add an assist to unwrap a type with a generic arg
This assist unwraps a type into its generic type argument, ignoring
const and lifetime arguments
2025-05-05 13:22:02 +05:30
Lukas Wirth
d24c37ed03
Merge pull request #19707 from Veykril/push-kqkpzkymkyyl
refactor: De-arc defmap queries
2025-05-05 07:15:38 +00:00
Lukas Wirth
79f0e2990b refactor: De-arc defmap queries 2025-05-05 09:04:52 +02:00
Madhav Madhusoodanan
e4272d12f2 feat: Added capability to add multiple dependencies for an LLVMFeature 2025-05-05 12:33:37 +05:30
Ralf Jung
f8a8bbd4c0
Merge pull request #4307 from JoJoDeveloping/remove-unique-is-unique
Remove -Zunique-is-unique
2025-05-05 06:47:59 +00:00
Lukas Wirth
5ba589bd77
Merge pull request #19742 from Veykril/push-ykmuwtkzruqm
fix: Fix incorrect handling of unresolved non-module imports in name resolution
2025-05-05 06:41:34 +00:00
Trevor Gross
339793d62b ci: Mention ci: skip-extensive in the error message 2025-05-05 02:31:52 -04:00
Trevor Gross
687902c1af Replace super::super with crate::support where possible
Since `crate::support` now works in both `compiler-builtins` and `libm`,
we can get rid of some of these unusual paths.
2025-05-05 02:31:52 -04:00
Lukas Wirth
bad7d122f4 Fix incorrect handling of unresolved non-module imports in name resolution 2025-05-05 08:29:34 +02:00
bors
54d024e4bf Auto merge of #140650 - tgross35:rollup-0mp4h1s, r=tgross35
Rollup of 4 pull requests

Successful merges:

 - #135734 (Correct `extract_if` sample equivalent.)
 - #140307 (Refactor rustc_on_unimplemented's filter parser)
 - #140644 (Revert "Avoid unused clones in Cloned<I> and Copied<I>")
 - #140648 (Update `compiler-builtins` to 0.1.157)

r? `@ghost`
`@rustbot` modify labels: rollup
2025-05-05 05:24:37 +00:00
Trevor Gross
512dab0bee
Rollup merge of #140648 - tgross35:update-builtins, r=tgross35
Update `compiler-builtins` to 0.1.157

Includes the following changes:

* Use runtime feature detection for fma routines on x86 [1]

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

[1]: https://github.com/rust-lang/compiler-builtins/pull/896
2025-05-05 00:20:58 -04:00
Trevor Gross
cac28ed674
Rollup merge of #140644 - the8472:revert-copy-clone-adapters, r=Mark-Simulacrum
Revert "Avoid unused clones in Cloned<I> and Copied<I>"

Per libs decision in https://github.com/rust-lang/rust/issues/140207#issuecomment-2842996190 this reverts commit ed5f31ab01 (#139745)
2025-05-05 00:20:58 -04:00
Trevor Gross
e9a50b8a0a
Rollup merge of #140307 - mejrs:condition_parser, r=nnethercote
Refactor rustc_on_unimplemented's filter parser

Followup to https://github.com/rust-lang/rust/pull/139091; I plan on moving most of this code into `rustc_attr_parsing` at some point, but want to land this separately first.

I have taken care to preserve the original behavior as much as I could:
- All but one of the new error variants are replacements for the ones originally emitted by the cfg parsing machinery; so these errors are not "new".
- the `InvalidFlag` variant is new, this PR turns this (from being ignored and silently doing nothing) into an error:
    ```rust
    #[rustc_on_unimplemented(on(something, message = "y"))]
    //~^ ERROR invalid boolean flag
    //~^^ NOTE expected one of `crate_local`, `direct` or `from_desugaring`, not `something`
    trait InvalidFlag {}
    ```
    This does not occur anywhere except in this test. I couldn't find a way that I liked to keep allowing this or to do nothing, erroring was the cleanest solution.
- There are a bunch of FIXME throughout this and the previous PR, I plan on addressing those in follow up prs..

Finally, this gets rid of the "longest" dependency in rustc:
![image](https://github.com/user-attachments/assets/3c3eb3a0-b7b3-40d9-aada-a752e28c8678)
2025-05-05 00:20:57 -04:00
Trevor Gross
c44e1d65f3
Rollup merge of #135734 - nk9:extract_if-doc-equivalent, r=tgross35
Correct `extract_if` sample equivalent.

Tracking issue: https://github.com/rust-lang/rust/issues/43244

Original PR: #133265

The sample code marked as equivalent in the doc comment isn't currently equivalent. Given the same predicate and range, if your vector were `[1, 2, 3, 3, 3, 3, 3, 3, 4, 5, 6]`, then all of the 3s would be removed. `i` is only incremented when an element is dropped, but `range.end` is unchanged, so the items shift down. I got very confused when reading the docs and trying to square this sample code with the explanation of how the function works.

Fortunately, the real `extract_if()` does not have this problem. I've added an `end` variable to align the behavior. I've also taken the opportunity to simplify the predicate, which now just matches odd numbers, and to pad out the vec of numbers to line up the zero-indexed range with the integers in the vec.

r? the8472
2025-05-05 00:20:57 -04:00
dianne
e5879018ef move logic for telling whether to peel smart pointers into a helper
The new logic for determining whether to peel references will depend on
whether smart pointers need to be peeled before matching.
2025-05-04 20:43:31 -07:00
ELginas
5032002c2f docs: fix typo in Cargo.toml
Initially introduced in 63ccaf11f08fb5d0b39cc33884c5a1a63f547ace

Signed-off-by: ELginas <gintaras.z123@yahoo.com>
2025-05-04 23:35:00 -04:00
bors
cd55868a8d Auto merge of #140353 - rust-lang:cargo_update, r=Mark-Simulacrum
Weekly `cargo update`

Automation to keep dependencies in `Cargo.lock` current.

The following is the output from `cargo update`:

```txt

compiler & tools dependencies:
     Locking 36 packages to latest compatible versions
    Updating addr2line v0.21.0 -> v0.24.2
    Updating anyhow v1.0.97 -> v1.0.98
    Updating askama v0.13.0 -> v0.13.1 (available: v0.14.0)
    Updating askama_derive v0.13.0 -> v0.13.1
    Updating backtrace v0.3.71 -> v0.3.74
    Updating blake3 v1.8.1 -> v1.8.2
    Updating chrono v0.4.40 -> v0.4.41
    Updating clap v4.5.36 -> v4.5.37
    Updating clap_builder v4.5.36 -> v4.5.37
    Updating color-eyre v0.6.3 -> v0.6.4
    Updating color-spantrace v0.2.1 -> v0.2.2
    Updating derive-where v1.2.7 -> v1.4.0
    Updating getrandom v0.2.15 -> v0.2.16
    Removing gimli v0.28.1
    Updating hashbrown v0.15.2 -> v0.15.3
    Updating jiff v0.2.6 -> v0.2.12
    Updating jiff-static v0.2.6 -> v0.2.12
    Updating libm v0.2.11 -> v0.2.13
    Removing object v0.32.2
    Updating openssl-sys v0.9.107 -> v0.9.108
      Adding owo-colors v4.2.0
    Updating proc-macro2 v1.0.94 -> v1.0.95
    Updating psm v0.1.25 -> v0.1.26
    Updating rand v0.9.0 -> v0.9.1
    Updating redox_syscall v0.5.11 -> v0.5.12
    Updating rustix v1.0.5 -> v1.0.7
    Updating sha2 v0.10.8 -> v0.10.9
    Updating stacker v0.1.20 -> v0.1.21
    Updating syn v2.0.100 -> v2.0.101
    Updating synstructure v0.13.1 -> v0.13.2
    Updating toml_datetime v0.6.8 -> v0.6.9
      Adding windows v0.61.1
      Adding windows-collections v0.2.0
      Adding windows-future v0.2.0
      Adding windows-numerics v0.2.0
    Updating winnow v0.7.6 -> v0.7.9
    Updating zerocopy v0.8.24 -> v0.8.25
    Updating zerocopy-derive v0.8.24 -> v0.8.25
note: pass `--verbose` to see 33 unchanged dependencies behind latest

library dependencies:
     Locking 2 packages to latest compatible versions
    Removing allocator-api2 v0.2.21
    Updating hashbrown v0.15.2 -> v0.15.3
    Removing proc-macro2 v1.0.94
    Removing quote v1.0.40
    Updating rand v0.9.0 -> v0.9.1
    Removing syn v2.0.100
    Removing unicode-ident v1.0.18
    Removing zerocopy v0.8.24
    Removing zerocopy-derive v0.8.24
note: pass `--verbose` to see 3 unchanged dependencies behind latest

rustbook dependencies:
     Locking 31 packages to latest compatible versions
    Updating ammonia v4.0.0 -> v4.1.0
    Updating anyhow v1.0.97 -> v1.0.98
    Updating cc v1.2.19 -> v1.2.21
    Updating chrono v0.4.40 -> v0.4.41
    Updating clap v4.5.36 -> v4.5.37
    Updating clap_builder v4.5.36 -> v4.5.37
    Updating clap_complete v4.5.47 -> v4.5.48
      Adding cssparser v0.35.0
      Adding cssparser-macros v0.6.1
      Adding dtoa v1.0.10
      Adding dtoa-short v0.3.5
    Updating hashbrown v0.15.2 -> v0.15.3
    Updating html5ever v0.27.0 -> v0.31.0
    Updating jiff v0.2.6 -> v0.2.12
    Updating jiff-static v0.2.6 -> v0.2.12
    Updating libc v0.2.171 -> v0.2.172
    Updating markup5ever v0.12.1 -> v0.16.1
      Adding match_token v0.1.0
      Adding phf_macros v0.11.3
    Updating proc-macro2 v1.0.94 -> v1.0.95
    Updating redox_syscall v0.5.11 -> v0.5.12
    Updating rustix v1.0.5 -> v1.0.7
    Updating sha2 v0.10.8 -> v0.10.9
    Updating syn v2.0.100 -> v2.0.101
    Updating synstructure v0.13.1 -> v0.13.2
    Updating toml v0.8.20 -> v0.8.22
    Updating toml_datetime v0.6.8 -> v0.6.9
    Updating toml_edit v0.22.24 -> v0.22.26
      Adding toml_write v0.1.1
      Adding web_atoms v0.1.1
    Updating winnow v0.7.6 -> v0.7.9
```
2025-05-05 02:11:37 +00:00
Alejandra González
689e62b3b2
fix: unused_async FP on default impl (#14720)
Closes rust-lang/rust-clippy#14704

changelog: [`unused_async`] fix FP on default impl
2025-05-05 00:43:30 +00:00
Mark Rousskov
07d38eec30 Temporarily downgrade backtrace to 0.3.71 2025-05-04 19:57:12 -04:00