mirror of
https://github.com/rust-lang/rust.git
synced 2025-10-28 03:24:11 +00:00
c-variadic: allow c-variadic inherent and trait methods tracking issue: https://github.com/rust-lang/rust/issues/44930 Continuing the work of https://github.com/rust-lang/rust/pull/146342, allow inherent and trait methods to be c-variadic. However, a trait that contains a c-variadic method is no longer dyn-compatible. There is, presumably, some way to make c-variadic methods dyn-compatible. However currently, we don't have confidence that it'll work reliably: when methods from a `dyn` object are cast to a function pointer, a `ReifyShim` is created. If that shim is c-variadic, it would need to forward the C variable argument list. That does appear to work, because the `va_list` is not represented in MIR at all in this case, so the registers from the call site are untouched by the shim and can be read by the actual implementation. That just does not seem like a solid implementation. Also, intuitively, why would c-variadic function, primarily needed for FFI, need to be used with `dyn` objects at all? We can revisit this limitation if a need arises. r? `@workingjubilee`
326 lines
14 KiB
Plaintext
326 lines
14 KiB
Plaintext
ast_passes_abi_cannot_be_coroutine =
|
|
functions with the {$abi} ABI cannot be `{$coroutine_kind_str}`
|
|
.suggestion = remove the `{$coroutine_kind_str}` keyword from this definition
|
|
|
|
ast_passes_abi_custom_safe_foreign_function =
|
|
foreign functions with the "custom" ABI cannot be safe
|
|
.suggestion = remove the `safe` keyword from this definition
|
|
|
|
ast_passes_abi_custom_safe_function =
|
|
functions with the "custom" ABI must be unsafe
|
|
.suggestion = add the `unsafe` keyword to this definition
|
|
|
|
ast_passes_abi_must_not_have_parameters_or_return_type=
|
|
invalid signature for `extern {$abi}` function
|
|
.note = functions with the {$abi} ABI cannot have any parameters or return type
|
|
.suggestion = remove the parameters and return type
|
|
|
|
ast_passes_abi_must_not_have_return_type=
|
|
invalid signature for `extern {$abi}` function
|
|
.note = functions with the {$abi} ABI cannot have a return type
|
|
.help = remove the return type
|
|
|
|
ast_passes_abi_x86_interrupt =
|
|
invalid signature for `extern "x86-interrupt"` function
|
|
.note = functions with the "x86-interrupt" ABI must be have either 1 or 2 parameters (but found {$param_count})
|
|
|
|
ast_passes_assoc_const_without_body =
|
|
associated constant in `impl` without body
|
|
.suggestion = provide a definition for the constant
|
|
|
|
ast_passes_assoc_fn_without_body =
|
|
associated function in `impl` without body
|
|
.suggestion = provide a definition for the function
|
|
|
|
ast_passes_assoc_type_without_body =
|
|
associated type in `impl` without body
|
|
.suggestion = provide a definition for the type
|
|
|
|
ast_passes_async_fn_in_const_trait_or_trait_impl =
|
|
async functions are not allowed in `const` {$in_impl ->
|
|
[true] trait impls
|
|
*[false] traits
|
|
}
|
|
.label = associated functions of `const` cannot be declared `async`
|
|
|
|
ast_passes_at_least_one_trait = at least one trait must be specified
|
|
|
|
ast_passes_auto_generic = auto traits cannot have generic parameters
|
|
.label = auto trait cannot have generic parameters
|
|
.suggestion = remove the parameters
|
|
|
|
ast_passes_auto_items = auto traits cannot have associated items
|
|
.label = {ast_passes_auto_items}
|
|
.suggestion = remove the associated items
|
|
|
|
ast_passes_auto_super_lifetime = auto traits cannot have super traits or lifetime bounds
|
|
.label = {ast_passes_auto_super_lifetime}
|
|
.suggestion = remove the super traits or lifetime bounds
|
|
|
|
ast_passes_body_in_extern = incorrect `{$kind}` inside `extern` block
|
|
.cannot_have = cannot have a body
|
|
.invalid = the invalid body
|
|
.existing = `extern` blocks define existing foreign {$kind}s and {$kind}s inside of them cannot have a body
|
|
|
|
ast_passes_bound_in_context = bounds on `type`s in {$ctx} have no effect
|
|
|
|
ast_passes_c_variadic_bad_extern = `...` is not supported for `extern "{$abi}"` functions
|
|
.label = `extern "{$abi}"` because of this
|
|
.help = only `extern "C"` and `extern "C-unwind"` functions may have a C variable argument list
|
|
|
|
ast_passes_c_variadic_must_be_unsafe =
|
|
functions with a C variable argument list must be unsafe
|
|
.suggestion = add the `unsafe` keyword to this definition
|
|
|
|
ast_passes_c_variadic_no_extern = `...` is not supported for non-extern functions
|
|
.help = only `extern "C"` and `extern "C-unwind"` functions may have a C variable argument list
|
|
|
|
ast_passes_const_and_c_variadic = functions cannot be both `const` and C-variadic
|
|
.const = `const` because of this
|
|
.variadic = C-variadic because of this
|
|
|
|
ast_passes_const_and_coroutine = functions cannot be both `const` and `{$coroutine_kind}`
|
|
.const = `const` because of this
|
|
.coroutine = `{$coroutine_kind}` because of this
|
|
.label = {""}
|
|
|
|
ast_passes_const_bound_trait_object = const trait bounds are not allowed in trait object types
|
|
|
|
ast_passes_const_without_body =
|
|
free constant item without body
|
|
.suggestion = provide a definition for the constant
|
|
|
|
ast_passes_constraint_on_negative_bound =
|
|
associated type constraints not allowed on negative bounds
|
|
|
|
ast_passes_coroutine_and_c_variadic = functions cannot be both `{$coroutine_kind}` and C-variadic
|
|
.const = `{$coroutine_kind}` because of this
|
|
.variadic = C-variadic because of this
|
|
|
|
ast_passes_equality_in_where = equality constraints are not yet supported in `where` clauses
|
|
.label = not supported
|
|
.suggestion = if `{$ident}` is an associated type you're trying to set, use the associated type binding syntax
|
|
.suggestion_path = if `{$trait_segment}::{$potential_assoc}` is an associated type you're trying to set, use the associated type binding syntax
|
|
.note = see issue #20041 <https://github.com/rust-lang/rust/issues/20041> for more information
|
|
|
|
ast_passes_extern_block_suggestion = if you meant to declare an externally defined function, use an `extern` block
|
|
|
|
ast_passes_extern_fn_qualifiers = functions in `extern` blocks cannot have `{$kw}` qualifier
|
|
.label = in this `extern` block
|
|
.suggestion = remove the `{$kw}` qualifier
|
|
|
|
ast_passes_extern_invalid_safety = items in `extern` blocks without an `unsafe` qualifier cannot have safety qualifiers
|
|
.suggestion = add `unsafe` to this `extern` block
|
|
|
|
ast_passes_extern_item_ascii = items in `extern` blocks cannot use non-ascii identifiers
|
|
.label = in this `extern` block
|
|
.note = this limitation may be lifted in the future; see issue #83942 <https://github.com/rust-lang/rust/issues/83942> for more information
|
|
|
|
ast_passes_extern_keyword_link = for more information, visit https://doc.rust-lang.org/std/keyword.extern.html
|
|
|
|
ast_passes_extern_types_cannot = `type`s inside `extern` blocks cannot have {$descr}
|
|
.suggestion = remove the {$remove_descr}
|
|
.label = `extern` block begins here
|
|
|
|
ast_passes_extern_without_abi = `extern` declarations without an explicit ABI are disallowed
|
|
.suggestion = specify an ABI
|
|
.help = prior to Rust 2024, a default ABI was inferred
|
|
|
|
ast_passes_extern_without_abi_sugg = `extern` declarations without an explicit ABI are deprecated
|
|
.label = ABI should be specified here
|
|
.suggestion = explicitly specify the {$default_abi} ABI
|
|
|
|
ast_passes_feature_on_non_nightly = `#![feature]` may not be used on the {$channel} release channel
|
|
.suggestion = remove the attribute
|
|
.stable_since = the feature `{$name}` has been stable since `{$since}` and no longer requires an attribute to enable
|
|
|
|
ast_passes_fieldless_union = unions cannot have zero fields
|
|
|
|
ast_passes_fn_body_extern = incorrect function inside `extern` block
|
|
.cannot_have = cannot have a body
|
|
.suggestion = remove the invalid body
|
|
.help = you might have meant to write a function accessible through FFI, which can be done by writing `extern fn` outside of the `extern` block
|
|
.label = `extern` blocks define existing foreign functions and functions inside of them cannot have a body
|
|
|
|
ast_passes_fn_param_c_var_args_not_last =
|
|
`...` must be the last argument of a C-variadic function
|
|
|
|
ast_passes_fn_param_doc_comment =
|
|
documentation comments cannot be applied to function parameters
|
|
.label = doc comments are not allowed here
|
|
|
|
ast_passes_fn_param_forbidden_attr =
|
|
allow, cfg, cfg_attr, deny, expect, forbid, and warn are the only allowed built-in attributes in function parameters
|
|
|
|
ast_passes_fn_param_forbidden_self =
|
|
`self` parameter is only allowed in associated functions
|
|
.label = not semantically valid as function parameter
|
|
.note = associated functions are those in `impl` or `trait` definitions
|
|
|
|
ast_passes_fn_param_too_many =
|
|
function can not have more than {$max_num_args} arguments
|
|
|
|
ast_passes_fn_ptr_invalid_safety = function pointers cannot be declared with `safe` safety qualifier
|
|
.suggestion = remove safe from this item
|
|
|
|
ast_passes_fn_without_body =
|
|
free function without a body
|
|
.suggestion = provide a definition for the function
|
|
|
|
ast_passes_forbidden_bound =
|
|
bounds cannot be used in this context
|
|
|
|
ast_passes_forbidden_const_param =
|
|
late-bound const parameters cannot be used currently
|
|
|
|
ast_passes_forbidden_default =
|
|
`default` is only allowed on items in trait impls
|
|
.label = `default` because of this
|
|
|
|
ast_passes_forbidden_non_lifetime_param =
|
|
only lifetime parameters can be used in this context
|
|
|
|
ast_passes_generic_before_constraints = generic arguments must come before the first constraint
|
|
.constraints = {$constraint_len ->
|
|
[one] constraint
|
|
*[other] constraints
|
|
}
|
|
.args = generic {$args_len ->
|
|
[one] argument
|
|
*[other] arguments
|
|
}
|
|
.empty_string = {""},
|
|
.suggestion = move the {$constraint_len ->
|
|
[one] constraint
|
|
*[other] constraints
|
|
} after the generic {$args_len ->
|
|
[one] argument
|
|
*[other] arguments
|
|
}
|
|
|
|
ast_passes_generic_default_trailing = generic parameters with a default must be trailing
|
|
|
|
ast_passes_incompatible_features = `{$f1}` and `{$f2}` are incompatible, using them at the same time is not allowed
|
|
.help = remove one of these features
|
|
|
|
ast_passes_item_invalid_safety = items outside of `unsafe extern {"{ }"}` cannot be declared with `safe` safety qualifier
|
|
.suggestion = remove safe from this item
|
|
|
|
ast_passes_item_underscore = `{$kind}` items in this context need a name
|
|
.label = `_` is not a valid name for this `{$kind}` item
|
|
|
|
ast_passes_match_arm_with_no_body =
|
|
`match` arm with no body
|
|
.suggestion = add a body after the pattern
|
|
|
|
ast_passes_missing_unsafe_on_extern = extern blocks must be unsafe
|
|
.suggestion = needs `unsafe` before the extern keyword
|
|
|
|
ast_passes_missing_unsafe_on_extern_lint = extern blocks should be unsafe
|
|
.suggestion = needs `unsafe` before the extern keyword
|
|
|
|
ast_passes_module_nonascii = trying to load file for module `{$name}` with non-ascii identifier name
|
|
.help = consider using the `#[path]` attribute to specify filesystem path
|
|
|
|
ast_passes_negative_bound_not_supported =
|
|
negative bounds are not supported
|
|
|
|
ast_passes_negative_bound_with_parenthetical_notation =
|
|
parenthetical notation may not be used for negative bounds
|
|
|
|
ast_passes_nested_impl_trait = nested `impl Trait` is not allowed
|
|
.outer = outer `impl Trait`
|
|
.inner = nested `impl Trait` here
|
|
|
|
ast_passes_nested_lifetimes = nested quantification of lifetimes
|
|
|
|
ast_passes_nomangle_ascii = `#[no_mangle]` requires ASCII identifier
|
|
|
|
ast_passes_obsolete_auto = `impl Trait for .. {"{}"}` is an obsolete syntax
|
|
.help = use `auto trait Trait {"{}"}` instead
|
|
|
|
ast_passes_out_of_order_params = {$param_ord} parameters must be declared prior to {$max_param} parameters
|
|
.suggestion = reorder the parameters: lifetimes, then consts and types
|
|
|
|
ast_passes_pattern_in_bodiless = patterns aren't allowed in functions without bodies
|
|
.label = pattern not allowed in function without body
|
|
|
|
ast_passes_pattern_in_fn_pointer = patterns aren't allowed in function pointer types
|
|
|
|
ast_passes_pattern_in_foreign = patterns aren't allowed in foreign function declarations
|
|
.label = pattern not allowed in foreign function
|
|
|
|
ast_passes_precise_capturing_duplicated = duplicate `use<...>` precise capturing syntax
|
|
.label = second `use<...>` here
|
|
|
|
ast_passes_precise_capturing_not_allowed_here = `use<...>` precise capturing syntax not allowed in {$loc}
|
|
|
|
ast_passes_static_without_body =
|
|
free static item without body
|
|
.suggestion = provide a definition for the static
|
|
|
|
ast_passes_tilde_const_disallowed = `[const]` is not allowed here
|
|
.closure = closures cannot have `[const]` trait bounds
|
|
.function = this function is not `const`, so it cannot have `[const]` trait bounds
|
|
.trait = this trait is not `const`, so it cannot have `[const]` trait bounds
|
|
.trait_impl = this impl is not `const`, so it cannot have `[const]` trait bounds
|
|
.impl = inherent impls cannot have `[const]` trait bounds
|
|
.trait_assoc_ty = associated types in non-`const` traits cannot have `[const]` trait bounds
|
|
.trait_impl_assoc_ty = associated types in non-const impls cannot have `[const]` trait bounds
|
|
.inherent_assoc_ty = inherent associated types cannot have `[const]` trait bounds
|
|
.struct = structs cannot have `[const]` trait bounds
|
|
.enum = enums cannot have `[const]` trait bounds
|
|
.union = unions cannot have `[const]` trait bounds
|
|
.anon_const = anonymous constants cannot have `[const]` trait bounds
|
|
.object = trait objects cannot have `[const]` trait bounds
|
|
.item = this item cannot have `[const]` trait bounds
|
|
|
|
ast_passes_trait_fn_const =
|
|
functions in {$in_impl ->
|
|
[true] trait impls
|
|
*[false] traits
|
|
} cannot be declared const
|
|
.label = functions in {$in_impl ->
|
|
[true] trait impls
|
|
*[false] traits
|
|
} cannot be const
|
|
.const_context_label = this declares all associated functions implicitly const
|
|
.remove_const_sugg = remove the `const`{$requires_multiple_changes ->
|
|
[true] {" ..."}
|
|
*[false] {""}
|
|
}
|
|
.make_impl_const_sugg = ... and declare the impl to be const instead
|
|
.make_trait_const_sugg = ... and declare the trait to be a `#[const_trait]` instead
|
|
|
|
ast_passes_trait_object_single_bound = only a single explicit lifetime bound is permitted
|
|
|
|
ast_passes_ty_alias_without_body =
|
|
free type alias without body
|
|
.suggestion = provide a definition for the type
|
|
|
|
ast_passes_unsafe_item = {$kind} cannot be declared unsafe
|
|
|
|
ast_passes_unsafe_negative_impl = negative impls cannot be unsafe
|
|
.negative = negative because of this
|
|
.unsafe = unsafe because of this
|
|
|
|
ast_passes_unsafe_static =
|
|
static items cannot be declared with `unsafe` safety qualifier outside of `extern` block
|
|
|
|
ast_passes_visibility_not_permitted =
|
|
visibility qualifiers are not permitted here
|
|
.enum_variant = enum variants and their fields always share the visibility of the enum they are in
|
|
.trait_impl = trait items always share the visibility of their trait
|
|
.individual_impl_items = place qualifiers on individual impl items instead
|
|
.individual_foreign_items = place qualifiers on individual foreign items instead
|
|
.remove_qualifier_sugg = remove the qualifier
|
|
|
|
ast_passes_where_clause_after_type_alias = where clauses are not allowed after the type for type aliases
|
|
.note = see issue #112792 <https://github.com/rust-lang/rust/issues/112792> for more information
|
|
.help = add `#![feature(lazy_type_alias)]` to the crate attributes to enable
|
|
|
|
ast_passes_where_clause_before_type_alias = where clauses are not allowed before the type for type aliases
|
|
.note = see issue #89122 <https://github.com/rust-lang/rust/issues/89122> for more information
|
|
.remove_suggestion = remove this `where`
|
|
.move_suggestion = move it to the end of the type declaration
|