summaryrefslogtreecommitdiffstats
path: root/compiler/rustc_hir_analysis/src/astconv/generics.rs
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-06-19 09:26:03 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-06-19 09:26:03 +0000
commit9918693037dce8aa4bb6f08741b6812923486c18 (patch)
tree21d2b40bec7e6a7ea664acee056eb3d08e15a1cf /compiler/rustc_hir_analysis/src/astconv/generics.rs
parentReleasing progress-linux version 1.75.0+dfsg1-5~progress7.99u1. (diff)
downloadrustc-9918693037dce8aa4bb6f08741b6812923486c18.tar.xz
rustc-9918693037dce8aa4bb6f08741b6812923486c18.zip
Merging upstream version 1.76.0+dfsg1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'compiler/rustc_hir_analysis/src/astconv/generics.rs')
-rw-r--r--compiler/rustc_hir_analysis/src/astconv/generics.rs27
1 files changed, 26 insertions, 1 deletions
diff --git a/compiler/rustc_hir_analysis/src/astconv/generics.rs b/compiler/rustc_hir_analysis/src/astconv/generics.rs
index d29a27ece..b495b00ec 100644
--- a/compiler/rustc_hir_analysis/src/astconv/generics.rs
+++ b/compiler/rustc_hir_analysis/src/astconv/generics.rs
@@ -243,6 +243,31 @@ pub fn create_args_for_parent_generic_args<'tcx, 'a>(
match (args_iter.peek(), params.peek()) {
(Some(&arg), Some(&param)) => {
match (arg, &param.kind, arg_count.explicit_late_bound) {
+ (
+ GenericArg::Const(hir::ConstArg {
+ is_desugared_from_effects: true,
+ ..
+ }),
+ GenericParamDefKind::Const { is_host_effect: false, .. }
+ | GenericParamDefKind::Type { .. }
+ | GenericParamDefKind::Lifetime,
+ _,
+ ) => {
+ // SPECIAL CASE FOR DESUGARED EFFECT PARAMS
+ // This comes from the following example:
+ //
+ // ```
+ // #[const_trait]
+ // pub trait PartialEq<Rhs: ?Sized = Self> {}
+ // impl const PartialEq for () {}
+ // ```
+ //
+ // Since this is a const impl, we need to insert a host arg at the end of
+ // `PartialEq`'s generics, but this errors since `Rhs` isn't specified.
+ // To work around this, we infer all arguments until we reach the host param.
+ args.push(ctx.inferred_kind(Some(&args), param, infer_args));
+ params.next();
+ }
(GenericArg::Lifetime(_), GenericParamDefKind::Lifetime, _)
| (
GenericArg::Type(_) | GenericArg::Infer(_),
@@ -636,7 +661,7 @@ pub(crate) fn prohibit_explicit_late_bound_lifetimes(
args.args[0].hir_id(),
multispan,
msg,
- |lint| lint,
+ |_| {},
);
}