Commit graph

92 commits

Author SHA1 Message Date
Antoni Boucher
bc8520d98e Revert "Fix LTO tests"
This reverts commit 2d123d08c9.
2024-07-05 11:35:16 -04:00
Antoni Boucher
2d123d08c9 Fix LTO tests
FIXME: we now have fat LTO objects even when only bitcode is requested.
2024-07-05 10:42:03 -04:00
Antoni Boucher
05a41b88a9 Merge branch 'master' into sync_from_rust_2024_07_02 2024-07-02 12:40:16 -04:00
Antoni Boucher
bbc765b49b Fix clippy warnings 2024-07-02 12:27:31 -04:00
Antoni Boucher
21b1b11981 WIP: Implement dummy ThinLTO
FIXME: This seems very slow.
==> Not sure anymore: compare with the master branch.
2024-07-02 12:27:25 -04:00
Guillaume Gomez
ca654047fb Add missing cast for function_ptr arguments 2024-07-02 12:24:03 -04:00
Antoni Boucher
c4e7c04de9 Fix location of check for sized floating-point types 2024-06-21 16:12:05 +02:00
Oli Scherer
527b3575ba Use a dedicated type instead of a reference for the diagnostic context
This paves the way for tracking more state (e.g. error tainting) in the diagnostic context handle
2024-06-18 15:42:11 +00:00
Augie Fackler
4a79b06f83 rustc_codegen_gcc: fix changed method signature 2024-05-23 15:23:21 -04:00
Augie Fackler
29fc479a30 rustc_codegen_llvm: add support for writing summary bitcode
Typical uses of ThinLTO don't have any use for this as a standalone
file, but distributed ThinLTO uses this to make the linker phase more
efficient. With clang you'd do something like `clang -flto=thin
-fthin-link-bitcode=foo.indexing.o -c foo.c` and then get both foo.o
(full of bitcode) and foo.indexing.o (just the summary or index part of
the bitcode). That's then usable by a two-stage linking process that's
more friendly to distributed build systems like bazel, which is why I'm
working on this area.

I talked some to @teresajohnson about naming in this area, as things
seem to be a little confused between various blog posts and build
systems. "bitcode index" and "bitcode summary" tend to be a little too
ambiguous, and she tends to use "thin link bitcode" and "minimized
bitcode" (which matches the descriptions in LLVM). Since the clang
option is thin-link-bitcode, I went with that to try and not add a new
spelling in the world.

Per @dtolnay, you can work around the lack of this by using `lld
--thinlto-index-only` to do the indexing on regular .o files of
bitcode, but that is a bit wasteful on actions when we already have all
the information in rustc and could just write out the matching minimized
bitcode. I didn't test that at all in our infrastructure, because by the
time I learned that I already had this patch largely written.
2024-05-22 14:04:22 -04:00
Mark Rousskov
2b875f0927 Step bootstrap cfgs 2024-05-01 22:19:11 -04:00
Antoni Boucher
9ed0543964 Some more fixes and workarounds for Aarch64 2024-04-29 11:07:54 -04:00
bors
678e62405f Auto merge of #122055 - compiler-errors:stabilize-atb, r=oli-obk
Stabilize associated type bounds (RFC 2289)

This PR stabilizes associated type bounds, which were laid out in [RFC 2289]. This gives us a shorthand to express nested type bounds that would otherwise need to be expressed with nested `impl Trait` or broken into several `where` clauses.

### What are we stabilizing?

We're stabilizing the associated item bounds syntax, which allows us to put bounds in associated type position within other bounds, i.e. `T: Trait<Assoc: Bounds...>`. See [RFC 2289] for motivation.

In all position, the associated type bound syntax expands into a set of two (or more) bounds, and never anything else (see "How does this differ[...]" section for more info).

Associated type bounds are stabilized in four positions:
* **`where` clauses (and APIT)** - This is equivalent to breaking up the bound into two (or more) `where` clauses. For example, `where T: Trait<Assoc: Bound>` is equivalent to `where T: Trait, <T as Trait>::Assoc: Bound`.
* **Supertraits** - Similar to above, `trait CopyIterator: Iterator<Item: Copy> {}`. This is almost equivalent to breaking up the bound into two (or more) `where` clauses; however, the bound on the associated item is implied whenever the trait is used. See #112573/#112629.
* **Associated type item bounds** - This allows constraining the *nested* rigid projections that are associated with a trait's associated types. e.g. `trait Trait { type Assoc: Trait2<Assoc2: Copy>; }`.
* **opaque item bounds (RPIT, TAIT)** - This allows constraining associated types that are associated with the opaque without having to *name* the opaque. For example, `impl Iterator<Item: Copy>` defines an iterator whose item is `Copy` without having to actually name that item bound.

The latter three are not expressible in surface Rust (though for associated type item bounds, this will change in #120752, which I don't believe should block this PR), so this does represent a slight expansion of what can be expressed in trait bounds.

### How does this differ from the RFC?

Compared to the RFC, the current implementation *always* desugars associated type bounds to sets of `ty::Clause`s internally. Specifically, it does *not* introduce a position-dependent desugaring as laid out in [RFC 2289], and in particular:
* It does *not* desugar to anonymous associated items in associated type item bounds.
* It does *not* desugar to nested RPITs in RPIT bounds, nor nested TAITs in TAIT bounds.

This position-dependent desugaring laid out in the RFC existed simply to side-step limitations of the trait solver, which have mostly been fixed in #120584. The desugaring laid out in the RFC also added unnecessary complication to the design of the feature, and introduces its own limitations to, for example:
* Conditionally lowering to nested `impl Trait` in certain positions such as RPIT and TAIT means that we inherit the limitations of RPIT/TAIT, namely lack of support for higher-ranked opaque inference. See this code example: https://github.com/rust-lang/rust/pull/120752#issuecomment-1979412531.
* Introducing anonymous associated types makes traits no longer object safe, since anonymous associated types are not nameable, and all associated types must be named in `dyn` types.

This last point motivates why this PR is *not* stabilizing support for associated type bounds in `dyn` types, e.g, `dyn Assoc<Item: Bound>`. Why? Because `dyn` types need to have *concrete* types for all associated items, this would necessitate a distinct lowering for associated type bounds, which seems both complicated and unnecessary compared to just requiring the user to write `impl Trait` themselves. See #120719.

### Implementation history:

Limited to the significant behavioral changes and fixes and relevant PRs, ping me if I left something out--
* #57428
* #108063
* #110512
* #112629
* #120719
* #120584

Closes #52662

[RFC 2289]: https://rust-lang.github.io/rfcs/2289-associated-type-bounds.html
2024-03-19 00:04:09 +00:00
tempdragon
390f9064e1 revert(lifetime): Add "needless" lifetime(s) and allow it in clippy
This reverts commit ad97b8c061.
2024-03-16 10:17:35 +08:00
tempdragon
ad97b8c061 fix(liftime): Gen. by cargo clippy
cmd: `cargo clippy --fix --lib -p rustc_codegen_gcc --allow-dirtyxs`
2024-03-11 12:20:36 +08:00
Michael Goulet
929e12d199 Stabilize associated type bounds 2024-03-08 20:56:25 +00:00
Guillaume Gomez
faebf73983 Merge commit 'b385428e3d' into subtree-update_cg_gcc_2024-03-05 2024-03-05 19:58:36 +01:00
antoyo
e4ec64a1c4
Merge pull request #459 from tempdragon/master
fix(fmt/style): Clippy-generated Code Correction
2024-03-04 08:07:26 -05:00
Antoni Boucher
56dc8de1db Switch to the new set_special_chars_allowed_in_func_names API 2024-03-01 12:21:31 -05:00
tempdragon
aeffc2fcaa fix(fmt/style): Clippy-generated Code Correction
Modifications to Commit:
	Modified:     src/allocator.rs
	Modified:     src/asm.rs
	Modified:     src/back/lto.rs
	Modified:     src/consts.rs
	Modified:     src/debuginfo.rs
	Modified:     src/intrinsic/mod.rs
	Modified:     src/lib.rs
	Modified:     src/mono_item.rs
	Modified:     src/type_.rs
	Modified:     tests/lang_tests_common.rs
2024-02-29 10:33:11 +08:00
Antoni Boucher
c2c68e3f4d Format the code 2024-02-28 17:49:16 -05:00
tempdragon
51cd5f1c78
fix(code fmt): Apply style suggestions from code review
Co-authored-by: antoyo <antoyo@users.noreply.github.com>
2024-02-29 01:10:51 +08:00
tempdragon
c638defad7 feat(debuginfo): Init Commit for debuginfo Support
TODO:
1. Add int.rs locations
2. Add demangling support
3. Add debug scope support
4. Add vtable support
5. Clean up builder.rs locations
2024-02-24 20:12:08 +08:00
Antoni Boucher
f6e16e95df Merge branch 'master' into sync_from_rust_2024_02_20 2024-02-20 10:24:06 -05:00
Nicholas Nethercote
7b1ac28f1c Make CodegenBackend::join_codegen infallible.
Because they all are, in practice.
2024-02-17 10:51:35 +11:00
Antoni Boucher
af289a5eac Use the default rust mangling 2024-02-16 11:13:26 -05:00
Nicholas Nethercote
007cea3238 Invert diagnostic lints.
That is, change `diagnostic_outside_of_impl` and
`untranslatable_diagnostic` from `allow` to `deny`, because more than
half of the compiler has be converted to use translated diagnostics.

This commit removes more `deny` attributes than it adds `allow`
attributes, which proves that this change is warranted.
2024-02-06 13:12:33 +11:00
usamoi
0783d45057 add avx512fp16 to x86 target features 2024-01-13 13:50:10 +08:00
Nicholas Nethercote
558d051b1d Rename {create,emit}_warning as {create,emit}_warn.
For consistency with `warn`/`struct_warn`, and also `{create,emit}_err`,
all of which use an abbreviated form.
2024-01-10 07:33:06 +11:00
Nicholas Nethercote
02ed790631 Remove Session methods that duplicate DiagCtxt methods.
Also add some `dcx` methods to types that wrap `TyCtxt`, for easier
access.
2023-12-24 08:05:28 +11:00
Antoni Boucher
a53495ab45 Add comment 2023-12-21 11:18:11 -05:00
Nicholas Nethercote
5ea71c1150 Rename many DiagCtxt arguments. 2023-12-18 16:06:22 +11:00
Nicholas Nethercote
590e0d9573 Rename Handler as DiagCtxt. 2023-12-18 16:06:19 +11:00
Urgau
b1affb9321 Move rustc_codegen_ssa target features to rustc_target 2023-12-14 14:40:55 +01:00
Nicholas Nethercote
8e13be084a Use rustc_fluent_macro::fluent_messages! directly.
Currently we always do this:
```
use rustc_fluent_macro::fluent_messages;
...
fluent_messages! { "./example.ftl" }
```
But there is no need, we can just do this everywhere:
```
rustc_fluent_macro::fluent_messages! { "./example.ftl" }
```
which is shorter.
2023-11-26 08:38:40 +11:00
Nicholas Nethercote
4de5d372aa Avoid need for {D,Subd}iagnosticMessage imports.
The `fluent_messages!` macro produces uses of
`crate::{D,Subd}iagnosticMessage`, which means that every crate using
the macro must have this import:
```
use rustc_errors::{DiagnosticMessage, SubdiagnosticMessage};
```

This commit changes the macro to instead use
`rustc_errors::{D,Subd}iagnosticMessage`, which avoids the need for the
imports.
2023-11-26 08:38:00 +11:00
Antoni Boucher
456754c21a Pass TyCtxt by value 2023-11-19 14:04:40 -05:00
Antoni Boucher
75fce09751 Merge commit '2e8386e9fb' into subtree-update_cg_gcc_2023-11-17 2023-11-19 13:42:13 -05:00
Mark Rousskov
a6493c1f65 Bump cfg(bootstrap)s 2023-11-15 19:41:28 -05:00
Ralf Jung
b2add8a63e target_feature: make it more clear what that 'Option' means 2023-11-12 12:46:05 +01:00
Antoni Boucher
9f4f90b19a Merge commit 'e4fe941b11' into subtree-update_cg_gcc_2023-10-25 2023-10-26 17:42:02 -04:00
Michael Howell
e1cb8187e1 docs: add Rust logo to more compiler crates
c6e6ecb1af added it to some of the
compiler's crates, but avoided adding it to all of them to reduce
bit-rot. This commit adds to more.
2023-10-16 15:38:08 -07:00
Antoni Boucher
ba103e34c0 Use IntoDynSyncSend 2023-10-09 17:13:35 -04:00
Antoni Boucher
242a482c88 Merge commit '11a0cceab9' into subtree-update_cg_gcc_2023-10-09 2023-10-09 15:53:34 -04:00
Oli Scherer
8373b05514 Have a single struct for queries and hook 2023-09-22 16:26:20 +00:00
Oli Scherer
38b9e26a75 Add a way to decouple the implementation and the declaration of a TyCtxt method. 2023-09-22 09:23:15 +00:00
Nicholas Nethercote
e94abcdf3d Use standard Rust capitalization rules for names containing "LTO". 2023-07-31 16:21:02 +10:00
Patrick Walton
2c0c87d959 rustc_llvm: Add a -Z print-llvm-stats option to expose LLVM statistics.
LLVM has a neat [statistics] feature that tracks how often optimizations kick
in. It's very handy for optimization work. Since we expose the LLVM pass
timings, I thought it made sense to expose the LLVM statistics too.

[statistics]: https://llvm.org/docs/ProgrammersManual.html#the-statistic-class-stats-option
2023-07-16 22:56:04 +09:00
Antoni Boucher
38c16e9862 Merge commit '1bbee3e217' into sync-cg_gcc-2023-06-19 2023-06-19 18:51:02 -04:00
Andrew Xie
8430ec5e50 Updated cranelift codegen to reflect modified trait signature 2023-06-04 21:54:38 -04:00