rust/compiler
Nicholas Nethercote 6b62f37402 Restrict `From<S>` for `{D,Subd}iagnosticMessage`.
Currently a `{D,Subd}iagnosticMessage` can be created from any type that
impls `Into<String>`. That includes `&str`, `String`, and `Cow<'static,
str>`, which are reasonable. It also includes `&String`, which is pretty
weird, and results in many places making unnecessary allocations for
patterns like this:
```
self.fatal(&format!(...))
```
This creates a string with `format!`, takes a reference, passes the
reference to `fatal`, which does an `into()`, which clones the
reference, doing a second allocation. Two allocations for a single
string, bleh.

This commit changes the `From` impls so that you can only create a
`{D,Subd}iagnosticMessage` from `&str`, `String`, or `Cow<'static,
str>`. This requires changing all the places that currently create one
from a `&String`. Most of these are of the `&format!(...)` form
described above; each one removes an unnecessary static `&`, plus an
allocation when executed. There are also a few places where the existing
use of `&String` was more reasonable; these now just use `clone()` at
the call site.

As well as making the code nicer and more efficient, this is a step
towards possibly using `Cow<'static, str>` in
`{D,Subd}iagnosticMessage::{Str,Eager}`. That would require changing
the `From<&'a str>` impls to `From<&'static str>`, which is doable, but
I'm not yet sure if it's worthwhile.
2023-05-03 08:44:39 +10:00
..
rustc fix link 2023-03-11 10:53:47 -06:00
rustc_abi layout-alignment-promotion logic should depend on the niche-bias 2023-04-28 23:08:54 +02:00
rustc_apfloat
rustc_arena Deny the `unsafe_op_in_unsafe_fn` lint in 2023-04-28 21:00:54 -07:00
rustc_ast Rip it out 2023-05-01 16:15:13 +08:00
rustc_ast_lowering Restrict `From<S>` for `{D,Subd}iagnosticMessage`. 2023-05-03 08:44:39 +10:00
rustc_ast_passes Restrict `From<S>` for `{D,Subd}iagnosticMessage`. 2023-05-03 08:44:39 +10:00
rustc_ast_pretty Rip it out 2023-05-01 16:15:13 +08:00
rustc_attr Restrict `From<S>` for `{D,Subd}iagnosticMessage`. 2023-05-03 08:44:39 +10:00
rustc_baked_icu_data update ICU4X to 1.1.0 2023-02-04 22:28:59 +01:00
rustc_borrowck Restrict `From<S>` for `{D,Subd}iagnosticMessage`. 2023-05-03 08:44:39 +10:00
rustc_builtin_macros Restrict `From<S>` for `{D,Subd}iagnosticMessage`. 2023-05-03 08:44:39 +10:00
rustc_codegen_cranelift Restrict `From<S>` for `{D,Subd}iagnosticMessage`. 2023-05-03 08:44:39 +10:00
rustc_codegen_gcc rename `needs_infer` to `has_infer` 2023-04-27 08:35:19 +01:00
rustc_codegen_llvm rename `needs_subst` to `has_param` 2023-04-27 08:35:19 +01:00
rustc_codegen_ssa Restrict `From<S>` for `{D,Subd}iagnosticMessage`. 2023-05-03 08:44:39 +10:00
rustc_const_eval Restrict `From<S>` for `{D,Subd}iagnosticMessage`. 2023-05-03 08:44:39 +10:00
rustc_data_structures Auto merge of #107782 - Zoxc:worker-local, r=cjgillot 2023-04-27 17:43:09 +00:00
rustc_driver Remove unneeded extern crate 2023-02-02 07:47:39 +01:00
rustc_driver_impl Fix ICE on --print=... i/o errors 2023-04-25 08:17:18 -07:00
rustc_error_codes Spelling - compiler 2023-04-17 16:09:18 -04:00
rustc_error_messages Restrict `From<S>` for `{D,Subd}iagnosticMessage`. 2023-05-03 08:44:39 +10:00
rustc_errors Restrict `From<S>` for `{D,Subd}iagnosticMessage`. 2023-05-03 08:44:39 +10:00
rustc_expand Restrict `From<S>` for `{D,Subd}iagnosticMessage`. 2023-05-03 08:44:39 +10:00
rustc_feature Rollup merge of #111048 - compiler-errors:rpitit-not-incomplete, r=jackh726 2023-05-02 11:44:53 +05:30
rustc_fluent_macro Remove unused `synstructure` dep 2023-04-22 22:03:33 +01:00
rustc_fs_util Add `try_canonicalize` to `rustc_fs_util` and use it over `fs::canonicalize` 2023-03-16 21:50:23 +01:00
rustc_graphviz
rustc_hir Rollup merge of #108161 - WaffleLapkin:const_param_ty, r=BoxyUwU 2023-05-02 11:44:50 +05:30
rustc_hir_analysis Restrict `From<S>` for `{D,Subd}iagnosticMessage`. 2023-05-03 08:44:39 +10:00
rustc_hir_pretty Rip it out 2023-05-01 16:15:13 +08:00
rustc_hir_typeck Restrict `From<S>` for `{D,Subd}iagnosticMessage`. 2023-05-03 08:44:39 +10:00
rustc_incremental Remove QueryEngine trait 2023-04-26 07:46:13 +02:00
rustc_index Decorative changes to `IndexVec` 2023-04-24 13:53:37 +00:00
rustc_infer Restrict `From<S>` for `{D,Subd}iagnosticMessage`. 2023-05-03 08:44:39 +10:00
rustc_interface Auto merge of #109611 - Zoxc:query-engine-rem, r=cjgillot 2023-04-29 21:58:13 +00:00
rustc_lexer Revert "Don't recover lifetimes/labels containing emojis as character literals" 2023-04-10 06:52:41 +00:00
rustc_lint Restrict `From<S>` for `{D,Subd}iagnosticMessage`. 2023-05-03 08:44:39 +10:00
rustc_lint_defs Partial stabilisation of `c_unwind` 2023-04-29 13:01:44 +01:00
rustc_llvm [LLVM17] Adapt to `ExplicitEmulatedTLS` removal. 2023-04-24 08:45:15 +00:00
rustc_log Stabilize IsTerminal 2023-04-10 17:24:23 +09:00
rustc_macros Split `{Idx, IndexVec, IndexSlice}` into their own modules 2023-04-24 13:53:35 +00:00
rustc_metadata Restrict `From<S>` for `{D,Subd}iagnosticMessage`. 2023-05-03 08:44:39 +10:00
rustc_middle Restrict `From<S>` for `{D,Subd}iagnosticMessage`. 2023-05-03 08:44:39 +10:00
rustc_mir_build Restrict `From<S>` for `{D,Subd}iagnosticMessage`. 2023-05-03 08:44:39 +10:00
rustc_mir_dataflow Split `{Idx, IndexVec, IndexSlice}` into their own modules 2023-04-24 13:53:35 +00:00
rustc_mir_transform Restrict `From<S>` for `{D,Subd}iagnosticMessage`. 2023-05-03 08:44:39 +10:00
rustc_monomorphize Box AssertKind 2023-05-01 23:12:41 -04:00
rustc_parse Restrict `From<S>` for `{D,Subd}iagnosticMessage`. 2023-05-03 08:44:39 +10:00
rustc_parse_format Fix typos in compiler 2023-04-10 22:02:52 +02:00
rustc_passes Restrict `From<S>` for `{D,Subd}iagnosticMessage`. 2023-05-03 08:44:39 +10:00
rustc_plugin_impl Add `rustc_fluent_macro` to decouple fluent from `rustc_macros` 2023-04-18 18:56:22 +00:00
rustc_privacy add EarlyBinder to output of explicit_item_bounds; replace bound_explicit_item_bounds usages; remove bound_explicit_item_bounds query 2023-04-20 12:36:50 -06:00
rustc_query_impl Remove QueryEngine trait 2023-04-26 07:46:13 +02:00
rustc_query_system Restrict `From<S>` for `{D,Subd}iagnosticMessage`. 2023-05-03 08:44:39 +10:00
rustc_resolve Restrict `From<S>` for `{D,Subd}iagnosticMessage`. 2023-05-03 08:44:39 +10:00
rustc_serialize Remove `MemDecoder::read_byte`. 2023-04-28 18:34:55 +10:00
rustc_session remove type_ascription_path_suggestions in parser 2023-05-01 16:15:16 +08:00
rustc_smir Add Call terminator to SMIR 2023-04-20 12:00:41 -03:00
rustc_span Rollup merge of #108161 - WaffleLapkin:const_param_ty, r=BoxyUwU 2023-05-02 11:44:50 +05:30
rustc_symbol_mangling rename `needs_subst` to `has_param` 2023-04-27 08:35:19 +01:00
rustc_target Change ABI order in is_stable 2023-04-29 13:01:46 +01:00
rustc_trait_selection Restrict `From<S>` for `{D,Subd}iagnosticMessage`. 2023-05-03 08:44:39 +10:00
rustc_traits Restrict `From<S>` for `{D,Subd}iagnosticMessage`. 2023-05-03 08:44:39 +10:00
rustc_transmute Remove unused `TypeFoldable`/`TypeVisitable` impls. 2023-04-26 15:19:50 +10:00
rustc_ty_utils Restrict `From<S>` for `{D,Subd}iagnosticMessage`. 2023-05-03 08:44:39 +10:00
rustc_type_ir Rollup merge of #110838 - nnethercote:more-Folder-Visitable-cleanups, r=lcnr 2023-04-27 21:34:14 +02:00