mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-22 06:44:35 +00:00
c8b76bcf58
On some architectures, vector types may have a different ABI depending on whether the relevant target features are enabled. (The ABI when the feature is disabled is often not specified, but LLVM implements some de-facto ABI.) As discussed in rust-lang/lang-team#235, this turns out to very easily lead to unsound code. This commit makes it a post-monomorphization future-incompat warning to declare or call functions using those vector types in a context in which the corresponding target features are disabled, if using an ABI for which the difference is relevant. This ensures that these functions are always called with a consistent ABI. See the [nomination comment](https://github.com/rust-lang/rust/pull/127731#issuecomment-2288558187) for more discussion. Part of #116558
40 lines
2.1 KiB
Plaintext
40 lines
2.1 KiB
Plaintext
monomorphize_abi_error_disabled_vector_type_call =
|
|
ABI error: this function call uses a vector type that requires the `{$required_feature}` target feature, which is not enabled in the caller
|
|
.label = function called here
|
|
.help = consider enabling it globally (`-C target-feature=+{$required_feature}`) or locally (`#[target_feature(enable="{$required_feature}")]`)
|
|
monomorphize_abi_error_disabled_vector_type_def =
|
|
ABI error: this function definition uses a vector type that requires the `{$required_feature}` target feature, which is not enabled
|
|
.label = function defined here
|
|
.help = consider enabling it globally (`-C target-feature=+{$required_feature}`) or locally (`#[target_feature(enable="{$required_feature}")]`)
|
|
|
|
monomorphize_couldnt_dump_mono_stats =
|
|
unexpected error occurred while dumping monomorphization stats: {$error}
|
|
|
|
monomorphize_encountered_error_while_instantiating =
|
|
the above error was encountered while instantiating `{$formatted_item}`
|
|
|
|
monomorphize_large_assignments =
|
|
moving {$size} bytes
|
|
.label = value moved from here
|
|
.note = The current maximum size is {$limit}, but it can be customized with the move_size_limit attribute: `#![move_size_limit = "..."]`
|
|
|
|
monomorphize_no_optimized_mir =
|
|
missing optimized MIR for an item in the crate `{$crate_name}`
|
|
.note = missing optimized MIR for this item (was the crate `{$crate_name}` compiled with `--emit=metadata`?)
|
|
|
|
monomorphize_recursion_limit =
|
|
reached the recursion limit while instantiating `{$shrunk}`
|
|
.note = `{$def_path_str}` defined here
|
|
|
|
monomorphize_start_not_found = using `fn main` requires the standard library
|
|
.help = use `#![no_main]` to bypass the Rust generated entrypoint and declare a platform specific entrypoint yourself, usually with `#[no_mangle]`
|
|
|
|
monomorphize_symbol_already_defined = symbol `{$symbol}` is already defined
|
|
|
|
monomorphize_unknown_cgu_collection_mode =
|
|
unknown codegen-item collection mode '{$mode}', falling back to 'lazy' mode
|
|
|
|
monomorphize_unused_generic_params = item has unused generic parameters
|
|
|
|
monomorphize_written_to_path = the full type name has been written to '{$path}'
|