Rollup merge of #119939 - clubby789:static-const-generic-note, r=compiler-errors
Improve 'generic param from outer item' error for `Self` and inside `static`/`const` items Fixes #109596 Fixes #119936
This commit is contained in:
commit
3c52832375
16 changed files with 118 additions and 43 deletions
|
@ -10,9 +10,7 @@ use rustc_span::symbol::{kw, Ident};
|
|||
use rustc_span::Span;
|
||||
|
||||
use crate::errors::{ParamKindInEnumDiscriminant, ParamKindInNonTrivialAnonConst};
|
||||
use crate::late::{
|
||||
ConstantHasGenerics, HasGenericParams, NoConstantGenericsReason, PathSource, Rib, RibKind,
|
||||
};
|
||||
use crate::late::{ConstantHasGenerics, NoConstantGenericsReason, PathSource, Rib, RibKind};
|
||||
use crate::macros::{sub_namespace_match, MacroRulesScope};
|
||||
use crate::BindingKey;
|
||||
use crate::{errors, AmbiguityError, AmbiguityErrorMisc, AmbiguityKind, Determinacy, Finalize};
|
||||
|
@ -1090,7 +1088,7 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> {
|
|||
| RibKind::ForwardGenericParamBan => {
|
||||
// Nothing to do. Continue.
|
||||
}
|
||||
RibKind::Item(_) | RibKind::AssocItem => {
|
||||
RibKind::Item(..) | RibKind::AssocItem => {
|
||||
// This was an attempt to access an upvar inside a
|
||||
// named function item. This is not allowed, so we
|
||||
// report an error.
|
||||
|
@ -1155,7 +1153,7 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> {
|
|||
}
|
||||
Res::Def(DefKind::TyParam, _) | Res::SelfTyParam { .. } | Res::SelfTyAlias { .. } => {
|
||||
for rib in ribs {
|
||||
let has_generic_params: HasGenericParams = match rib.kind {
|
||||
let (has_generic_params, def_kind) = match rib.kind {
|
||||
RibKind::Normal
|
||||
| RibKind::FnOrCoroutine
|
||||
| RibKind::Module(..)
|
||||
|
@ -1213,7 +1211,9 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> {
|
|||
}
|
||||
|
||||
// This was an attempt to use a type parameter outside its scope.
|
||||
RibKind::Item(has_generic_params) => has_generic_params,
|
||||
RibKind::Item(has_generic_params, def_kind) => {
|
||||
(has_generic_params, def_kind)
|
||||
}
|
||||
RibKind::ConstParamTy => {
|
||||
if let Some(span) = finalize {
|
||||
self.report_error(
|
||||
|
@ -1231,7 +1231,11 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> {
|
|||
if let Some(span) = finalize {
|
||||
self.report_error(
|
||||
span,
|
||||
ResolutionError::GenericParamsFromOuterItem(res, has_generic_params),
|
||||
ResolutionError::GenericParamsFromOuterItem(
|
||||
res,
|
||||
has_generic_params,
|
||||
def_kind,
|
||||
),
|
||||
);
|
||||
}
|
||||
return Res::Err;
|
||||
|
@ -1239,7 +1243,7 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> {
|
|||
}
|
||||
Res::Def(DefKind::ConstParam, _) => {
|
||||
for rib in ribs {
|
||||
let has_generic_params = match rib.kind {
|
||||
let (has_generic_params, def_kind) = match rib.kind {
|
||||
RibKind::Normal
|
||||
| RibKind::FnOrCoroutine
|
||||
| RibKind::Module(..)
|
||||
|
@ -1276,7 +1280,9 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> {
|
|||
continue;
|
||||
}
|
||||
|
||||
RibKind::Item(has_generic_params) => has_generic_params,
|
||||
RibKind::Item(has_generic_params, def_kind) => {
|
||||
(has_generic_params, def_kind)
|
||||
}
|
||||
RibKind::ConstParamTy => {
|
||||
if let Some(span) = finalize {
|
||||
self.report_error(
|
||||
|
@ -1295,7 +1301,11 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> {
|
|||
if let Some(span) = finalize {
|
||||
self.report_error(
|
||||
span,
|
||||
ResolutionError::GenericParamsFromOuterItem(res, has_generic_params),
|
||||
ResolutionError::GenericParamsFromOuterItem(
|
||||
res,
|
||||
has_generic_params,
|
||||
def_kind,
|
||||
),
|
||||
);
|
||||
}
|
||||
return Res::Err;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue