bors
d9e317a176
Auto merge of #106224 - bjorn3:staticlib_fixes, r=wesleywiser
...
Small fixes for --crate-type staticlib
The first commit doesn't have an effect until we start translating error messages. The second commit fixes potential linker errors when combining `--crate-type staticlib` with another crate type and I think `-Cprefer-dynamic`.
2023-01-04 21:35:15 +00:00
Matthias Krüger
11020b93b6
Rollup merge of #106361 - clubby789:int-literal-too-large, r=estebank
...
Note maximum integer literal for `IntLiteralTooLarge`
Closes #105908
`@rustbot` label +A-diagnostics
2023-01-04 07:28:56 +01:00
bors
3b1c8a94a4
Auto merge of #105609 - bjorn3:shrink_rustc_dev, r=jyn514
...
Only include metadata for non-dynamic libraries in rustc-dev
The actual object code should be linked from librustc_driver.so, which is still included in rustc-dev. This saves on download time and disk usage.
Fixes https://github.com/rust-lang/rust/issues/103538
2023-01-03 08:05:54 +00:00
clubby789
537c7f4fa9
Print correct base for too-large literals
...
Also update tests
2023-01-02 11:43:07 +00:00
clubby789
cafdd2f7bb
Note maximum integer literal for IntLiteralTooLarge
2023-01-02 03:52:29 +00:00
bjorn3
7837058073
Add help for the error message when missing rustc_driver
2022-12-31 17:20:13 +00:00
Ezra Shaw
24b39ece2f
refactor: merge E0465
into E0464
2022-12-31 20:44:54 +13:00
bjorn3
0b54782cc8
Don't translate --print native-static-libs output
...
This breaks tools that depend on the prefix
2022-12-28 17:56:31 +00:00
Michael Goulet
aff403cf68
Recover fn
keyword as Fn
trait in bounds
2022-12-27 06:14:46 +00:00
Matthias Krüger
d23cb738d2
Rollup merge of #105975 - jeremystucki:rustc-remove-needless-lifetimes, r=eholk
...
rustc: Remove needless lifetimes
2022-12-24 00:31:41 +01:00
Matthias Krüger
da370fe25a
Rollup merge of #106057 - jyn514:trimmed-def-paths-ice, r=compiler-errors
...
Give a more helpful error for "trimmed_def_paths constructed"
cc https://rust-lang.zulipchat.com/#narrow/stream/122651-general/topic/ice.20debugging/near/315928294 , https://github.com/rust-lang/rust/pull/106056
`@mejrs` do you think this would have helped you figure out the problem faster?
2022-12-23 01:17:51 +01:00
Joshua Nelson
e4330295d9
Give a more helpful error for "trimmed_def_paths construted"
2022-12-22 13:12:15 -06:00
Bryan Garza
9650a4168f
Improve code based on feedback.
...
This patch improves the readability of some of the code by using
if-let-chains. Also, make use of the `add_feature_diagnostics` function.
2022-12-21 03:47:27 +00:00
Bryan Garza
e28a07a0a1
update wording of lint
2022-12-21 03:30:46 +00:00
Bryan Garza
dc2c4ce578
Update code based on PR comments
...
This patch does the following:
- Refactor some repeated lines into a single one
- Split the `ungated_async_fn_caller` lint into multiple lines, and make
one of those lines only print out on nightly
- Use test revisions instead of copying an existing test
2022-12-21 03:30:37 +00:00
Bryan Garza
04926e0534
Switch #[track_caller]
back to a no-op unless feature gate is enabled
...
This patch fixes a regression, in which `#[track_caller]`, which was
previously a no-op, was changed to actually turn on the behavior. This
should instead only happen behind the `closure_track_caller` feature
gate.
Also, add a warning for the user to understand how their code will
compile depending on the feature gate being turned on or not.
Fixes #104588
2022-12-21 03:23:08 +00:00
Jeremy Stucki
3dde32ca97
rustc: Remove needless lifetimes
2022-12-20 22:10:40 +01:00
mejrs
1bdf112529
Resolve various merge conflicts
2022-12-17 19:08:25 +01:00
TheOddGarlic
e71a722fa6
Migrate multiple mut borrows diagnostic
2022-12-17 19:08:25 +01:00
TheOddGarlic
3a9a06311d
Migrate borrow of moved value diagnostic
2022-12-17 19:08:25 +01:00
TheOddGarlic
eeef05b318
Migrate irrefutable let pattern diagnostics
2022-12-17 19:08:25 +01:00
TheOddGarlic
e1c5073c07
Migrate pattern bindings with variant name lint
2022-12-17 19:08:25 +01:00
TheOddGarlic
6f82a00aa1
Migrate leading/trailing irrefutable let pattern diagnostics
2022-12-17 19:08:24 +01:00
TheOddGarlic
4b70784176
Migrate lower range bound diagnostics
2022-12-17 19:08:24 +01:00
TheOddGarlic
513e3995e0
Migrate "could not evaluate const pattern" diagnostic
2022-12-17 19:08:24 +01:00
TheOddGarlic
d5f821eeb0
Migrate "constant pattern depends on generic parameter" diagnostic
2022-12-17 19:08:24 +01:00
TheOddGarlic
b694e6649e
Migrate unreachable pattern diagnostic
2022-12-17 19:08:24 +01:00
TheOddGarlic
98442b6905
Migrate pattern inlining error diagnostics
2022-12-17 19:08:24 +01:00
TheOddGarlic
c7bfd00719
Migrate "non-exhaustive patterns: type is non-empty" diagnostic
2022-12-17 19:08:24 +01:00
TheOddGarlic
71a9cb9b7e
Migrate "unused unsafe" lint
2022-12-17 19:08:24 +01:00
TheOddGarlic
64f3e4f195
Migrate "requires unsafe" diagnostics
2022-12-17 19:08:24 +01:00
TheOddGarlic
71fe52fed0
Migrate "unsafe_op_in_unsafe_fn" lints
2022-12-17 19:08:24 +01:00
TheOddGarlic
82f05446a5
Migrate "function cannot return without recursing" diagnostic
2022-12-17 19:08:24 +01:00
bors
aef17b7ae6
Auto merge of #105421 - jacobbramley:jb/branch-prot-check, r=nagisa
...
Check AArch64 branch-protection earlier in the pipeline.
As suggested in #93516 .
r? `@nagisa`
2022-12-17 12:10:27 +00:00
bors
bbb9cfbbc5
Auto merge of #102318 - Amanieu:default_alloc_error_handler, r=oli-obk
...
Stabilize default_alloc_error_handler
Tracking issue: #66741
This turns `feature(default_alloc_error_handler)` on by default, which causes the compiler to automatically generate a default OOM handler which panics if `#[alloc_error_handler]` is not provided.
The FCP completed over 2 years ago but the stabilization was blocked due to an issue with unwinding. This was fixed by #88098 so stabilization can be unblocked.
Closes #66741
2022-12-16 21:08:45 +00:00
Matthias Krüger
863d1f653a
Rollup merge of #105481 - lqd:mono-stats, r=wesleywiser
...
Start improving monomorphization items stats
As described in [this zulip discussion](https://rust-lang.zulipchat.com/#narrow/stream/247081-t-compiler.2Fperformance/topic/Compile-time.20case-study.3A.20AWS.20crates/near/314560832 ), some stats about monomorphization collection would be interesting to have, in a different form than `-Zprint-mono-items`: to have some visibility into the cost of the mono items, we'd like to know how many are instantiated and what is their estimated size.
That can be a proxy to analyze sources of slow compile times, although in the future, we'd also like to add more realistic stats from the actual backend's lowering.
This PR adds a new `-Z dump-mono-stats` flag which will output some stats in a `{crate_name}.mono-items.md` file (the flag optionally takes an output directory parameter, for easier use within a workspace than printing to stdout).
For example,
```rust
fn compute<T>(collection: Vec<T>) -> usize {
collection.len() + 19 - 0 * 9 - 18 - 1 * 1 // random code to increase the function's size
}
fn main() {
dbg!(compute(vec![0u8, 1, 2]));
dbg!(compute(vec![0u64, 1, 2]));
dbg!(compute(vec!["0", "1", "2", "3"]));
}
```
will output a file with this markdown table (abridged for readability), for a debug build:
| Item | Instantiation count | Estimated Cost Per Instantiation | Total Estimated Cost |
| --- | ---: | ---: | ---: |
| alloc::alloc::box_free | 3 | 122 | 366 |
| std::alloc::Global::alloc_impl | 1 | 284 | 284 |
| alloc::raw_vec::RawVec::<T, A>::current_memory | 3 | 82 | 246 |
| std::ptr::align_offset | 1 | 222 | 222 |
| std::slice::hack::into_vec | 3 | 67 | 201 |
| <std::vec::Vec<T, A> as std::ops::Drop>::drop | 3 | 66 | 198 |
| std::ptr::mut_ptr::<impl *mut T>::is_null | 4 | 47 | 188 |
| main | 1 | 163 | 163 |
| std::ptr::NonNull::<T>::new_unchecked | 4 | 37 | 148 |
...
<details>
<summary>Click for full output</summary>
| Item | Instantiation count | Estimated Cost Per Instantiation | Total Estimated Cost |
| --- | ---: | ---: | ---: |
| alloc::alloc::box_free | 3 | 122 | 366 |
| std::alloc::Global::alloc_impl | 1 | 284 | 284 |
| alloc::raw_vec::RawVec::<T, A>::current_memory | 3 | 82 | 246 |
| std::ptr::align_offset | 1 | 222 | 222 |
| std::slice::hack::into_vec | 3 | 67 | 201 |
| <std::vec::Vec<T, A> as std::ops::Drop>::drop | 3 | 66 | 198 |
| std::ptr::mut_ptr::<impl *mut T>::is_null | 4 | 47 | 188 |
| main | 1 | 163 | 163 |
| std::ptr::NonNull::<T>::new_unchecked | 4 | 37 | 148 |
| std::boxed::Box::<T, A>::into_unique | 3 | 48 | 144 |
| std::boxed::Box::<T, A>::leak | 3 | 39 | 117 |
| std::alloc::Layout::array::inner | 1 | 107 | 107 |
| std::ptr::align_offset::mod_inv | 1 | 103 | 103 |
| std::boxed::Box::<T, A>::into_raw_with_allocator | 3 | 31 | 93 |
| std::fmt::Arguments::<'a>::new_v1 | 1 | 80 | 80 |
| <alloc::raw_vec::RawVec<T, A> as std::ops::Drop>::drop | 3 | 26 | 78 |
| alloc::raw_vec::RawVec::<T, A>::from_raw_parts_in | 3 | 26 | 78 |
| alloc::alloc::exchange_malloc | 1 | 75 | 75 |
| std::ptr::const_ptr::<impl *const T>::is_null | 1 | 75 | 75 |
| std::ptr::const_ptr::<impl *const T>::is_aligned_to | 1 | 64 | 64 |
| compute | 3 | 20 | 60 |
| std::ptr::const_ptr::<impl *const T>::align_offset | 1 | 55 | 55 |
| std::ptr::read | 1 | 52 | 52 |
| <std::alloc::Global as std::alloc::Allocator>::deallocate | 1 | 50 | 50 |
| std::ptr::mut_ptr::<impl *mut T>::guaranteed_eq | 1 | 48 | 48 |
| std::fmt::ArgumentV1::<'a>::new_display | 2 | 22 | 44 |
| std::ptr::Alignment::new_unchecked | 1 | 42 | 42 |
| core::fmt::num::<impl std::fmt::Debug for usize>::fmt | 1 | 40 | 40 |
| std::result::Result::<T, E>::unwrap_unchecked | 1 | 37 | 37 |
| std::cmp::Ord::min | 1 | 32 | 32 |
| std::cmp::impls::<impl std::cmp::Ord for usize>::cmp | 1 | 31 | 31 |
| std::intrinsics::is_aligned_and_not_null | 1 | 27 | 27 |
| std::rt::lang_start | 1 | 27 | 27 |
| std::ptr::NonNull::<T>::new | 1 | 24 | 24 |
| std::fmt::ArgumentV1::<'a>::new_debug | 1 | 22 | 22 |
| std::fmt::Arguments::<'a>::new_v1_formatted | 1 | 19 | 19 |
| std::rt::lang_start::{closure#0} | 1 | 17 | 17 |
| std::sys_common::backtrace::__rust_begin_short_backtrace | 1 | 16 | 16 |
| std::slice::<impl [T]>::into_vec | 3 | 5 | 15 |
| <std::ptr::NonNull<T> as std::convert::From<std::ptr::Unique<T>>>::from | 1 | 14 | 14 |
| <&T as std::fmt::Debug>::fmt | 1 | 12 | 12 |
| <&T as std::fmt::Display>::fmt | 1 | 12 | 12 |
| std::vec::Vec::<T, A>::len | 3 | 2 | 6 |
| <T as std::convert::Into<U>>::into | 1 | 5 | 5 |
| <T as std::convert::From<T>>::from | 1 | 2 | 2 |
| <() as std::process::Termination>::report | 1 | 2 | 2 |
| std::hint::unreachable_unchecked | 1 | 2 | 2 |
| core::fmt::UnsafeArg::new | 1 | 1 | 1 |
</details>
Since we discussed it together, r? `@wesleywiser.`
2022-12-15 22:02:57 +01:00
Dan Johnson
da98ef9a5d
Ensure async trait impls are async (or otherwise return an opaque type)
...
As a workaround for the full `#[refine]` semantics not being implemented
yet, forbit returning a concrete future type like `Box<dyn Future>` or a
manually implemented Future.
`-> impl Future` is still permitted; while that can also cause
accidental refinement, that's behind a different feature gate
(`return_position_impl_trait_in_trait`) and that problem exists
regardless of whether the trait method is async, so will have to be
solved more generally.
Fixes #102745
2022-12-14 16:38:21 -08:00
Rémy Rakic
7611933e6a
add -Z dump-mono-stats
...
This option will output some stats from the monomorphization collection
pass to a file, to show estimated sizes from each instantiation.
2022-12-14 20:17:52 +00:00
Matthias Krüger
c8fd654d7c
Rollup merge of #105502 - chenyukang:yukang/fix-105366-impl, r=estebank
...
Suggest impl in the scenario of typo with fn
Fixes #105366
2022-12-14 10:31:06 +01:00
Michael Goulet
a8a45100a0
Move some codegen-y methods from rustc_hir_analysis::collect -> rustc_codegen_ssa
2022-12-13 05:01:36 +00:00
nils
2f9f097cb8
Migrate parts of rustc_expand
to session diagnostics
...
This migrates everything but the `mbe` and `proc_macro` modules. It also
contains a few cleanups and drive-by/accidental diagnostic improvements
which can be seen in the diff for the UI tests.
2022-12-10 11:02:41 +01:00
yukang
b70a869d8f
fix #105366 , suggest impl in the scenario of typo with fn
2022-12-10 11:01:52 +08:00
bors
91b8f34ac2
Auto merge of #104799 - pcc:linkage-fn, r=tmiasko
...
Support Option and similar enums as type of static variable with linkage attribute
Compiler MCP:
rust-lang/compiler-team#565
2022-12-07 10:24:59 +00:00
Jacob Bramley
49f3c0b736
Check AArch64 branch-protection earlier in the pipeline.
...
As suggested in #93516 .
2022-12-06 15:51:57 +00:00
Esteban Küber
e802165dfe
On E0195 point at where clause lifetime bounds
...
Fix #104733
2022-12-05 20:43:41 -08:00
Peter Collingbourne
f44a0153bc
Support Option and similar enums as type of static variable with linkage attribute.
...
Compiler MCP:
https://github.com/rust-lang/compiler-team/issues/565
2022-12-05 15:05:43 -08:00
Peter Collingbourne
5873ebeef3
Move linkage type check to HIR analysis and fix semantics issues.
...
This ensures that the error is printed even for unused variables,
as well as unifying the handling between the LLVM and GCC backends.
This also fixes unusual behavior around exported Rust-defined variables
with linkage attributes. With the previous behavior, it appears to be
impossible to define such a variable such that it can actually be imported
and used by another crate. This is because on the importing side, the
variable is required to be a pointer, but on the exporting side, the
type checker rejects static variables of pointer type because they do
not implement `Sync`. Even if it were possible to import such a type, it
appears that code generation on the importing side would add an unexpected
additional level of pointer indirection, which would break type safety.
This highlighted that the semantics of linkage on Rust-defined variables
is different to linkage on foreign items. As such, we now model the
difference with two different codegen attributes: linkage for Rust-defined
variables, and import_linkage for foreign items.
This change gives semantics to the test
src/test/ui/linkage-attr/auxiliary/def_illtyped_external.rs which was
previously expected to fail to compile. Therefore, convert it into a
test that is expected to successfully compile.
The update to the GCC backend is speculative and untested.
2022-12-05 15:05:43 -08:00
bjorn3
be6708428f
Rewrite LLVM's archive writer in Rust
...
This allows it to be used by other codegen backends
2022-11-26 19:35:32 +00:00
Manish Goregaokar
54b6292855
Rollup merge of #104621 - YC:master, r=davidtwco
...
Fix --extern library finding errors
- `crate_name` is not specified/passed to `metadata_crate_location_unknown_type`
c493bae0d8/compiler/rustc_error_messages/locales/en-US/metadata.ftl (L274-L275)
- `metadata_lib_filename_form` is missing `$`
- Add additional check to ensure that library is file
Testing
1. Create file `a.rs`
```rust
extern crate t;
fn main() {}
```
1. Create empty file `x`
1. Create empty directory `y`
1. Run
```sh
$ rustc -o a a.rs --extern t=x
$ rustc -o a a.rs --extern t=y
```
Both currently panic with stable.
2022-11-22 22:54:40 -05:00
Steven Tang
395f2b84e6
Remove extra . in metadata_lib_filename_form
2022-11-22 17:07:19 +11:00