summaryrefslogtreecommitdiffstats
path: root/compiler/rustc_ast_passes/src/ast_validation.rs
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/rustc_ast_passes/src/ast_validation.rs')
-rw-r--r--compiler/rustc_ast_passes/src/ast_validation.rs27
1 files changed, 18 insertions, 9 deletions
diff --git a/compiler/rustc_ast_passes/src/ast_validation.rs b/compiler/rustc_ast_passes/src/ast_validation.rs
index 04ed27678..096cea945 100644
--- a/compiler/rustc_ast_passes/src/ast_validation.rs
+++ b/compiler/rustc_ast_passes/src/ast_validation.rs
@@ -364,7 +364,12 @@ impl<'a> AstValidator<'a> {
self.err_handler().emit_err(errors::BoundInContext { span, ctx });
}
- fn check_foreign_ty_genericless(&self, generics: &Generics, where_span: Span) {
+ fn check_foreign_ty_genericless(
+ &self,
+ generics: &Generics,
+ before_where_clause: &TyAliasWhereClause,
+ after_where_clause: &TyAliasWhereClause,
+ ) {
let cannot_have = |span, descr, remove_descr| {
self.err_handler().emit_err(errors::ExternTypesCannotHave {
span,
@@ -378,9 +383,14 @@ impl<'a> AstValidator<'a> {
cannot_have(generics.span, "generic parameters", "generic parameters");
}
- if !generics.where_clause.predicates.is_empty() {
- cannot_have(where_span, "`where` clauses", "`where` clause");
- }
+ let check_where_clause = |where_clause: &TyAliasWhereClause| {
+ if let TyAliasWhereClause(true, where_clause_span) = where_clause {
+ cannot_have(*where_clause_span, "`where` clauses", "`where` clause");
+ }
+ };
+
+ check_where_clause(before_where_clause);
+ check_where_clause(after_where_clause);
}
fn check_foreign_kind_bodyless(&self, ident: Ident, kind: &str, body: Option<Span>) {
@@ -613,13 +623,12 @@ impl<'a> AstValidator<'a> {
fn maybe_lint_missing_abi(&mut self, span: Span, id: NodeId) {
// FIXME(davidtwco): This is a hack to detect macros which produce spans of the
// call site which do not have a macro backtrace. See #61963.
- let is_macro_callsite = self
+ if self
.session
.source_map()
.span_to_snippet(span)
- .map(|snippet| snippet.starts_with("#["))
- .unwrap_or(true);
- if !is_macro_callsite {
+ .is_ok_and(|snippet| !snippet.starts_with("#["))
+ {
self.lint_buffer.buffer_lint_with_diagnostic(
MISSING_ABI,
id,
@@ -1039,7 +1048,7 @@ impl<'a> Visitor<'a> for AstValidator<'a> {
self.check_defaultness(fi.span, *defaultness);
self.check_foreign_kind_bodyless(fi.ident, "type", ty.as_ref().map(|b| b.span));
self.check_type_no_bounds(bounds, "`extern` blocks");
- self.check_foreign_ty_genericless(generics, where_clauses.0.1);
+ self.check_foreign_ty_genericless(generics, &where_clauses.0, &where_clauses.1);
self.check_foreign_item_ascii_only(fi.ident);
}
ForeignItemKind::Static(_, _, body) => {