Skip to content

Commit

Permalink
Correctly check never_type feature gating
Browse files Browse the repository at this point in the history
  • Loading branch information
GuillaumeGomez committed Feb 1, 2024
1 parent 11f32b7 commit a06ebec
Showing 1 changed file with 12 additions and 8 deletions.
20 changes: 12 additions & 8 deletions compiler/rustc_ast_passes/src/feature_gate.rs
Original file line number Diff line number Diff line change
Expand Up @@ -59,14 +59,15 @@ macro_rules! gate_legacy {
}

pub fn check_attribute(attr: &ast::Attribute, sess: &Session, features: &Features) {
PostExpansionVisitor { sess, features }.visit_attribute(attr)
PostExpansionVisitor { sess, features, is_in_generics: false }.visit_attribute(attr)
}

struct PostExpansionVisitor<'a> {
sess: &'a Session,

// `sess` contains a `Features`, but this might not be that one.
features: &'a Features,
is_in_generics: bool,
}

impl<'a> PostExpansionVisitor<'a> {
Expand Down Expand Up @@ -349,17 +350,20 @@ impl<'a> Visitor<'a> for PostExpansionVisitor<'a> {
_ => {}
}
}
let prev = std::mem::replace(&mut self.is_in_generics, true);
visit::walk_generics(self, g);
self.is_in_generics = prev;
}

fn visit_fn_ret_ty(&mut self, ret_ty: &'a ast::FnRetTy) {
if let ast::FnRetTy::Ty(output_ty) = ret_ty {
if let ast::TyKind::Never = output_ty.kind {
// Do nothing.
} else {
self.visit_ty(output_ty)
}
if let ast::FnRetTy::Ty(output_ty) = ret_ty
&& let ast::TyKind::Never = output_ty.kind
&& !self.is_in_generics
{
// Do nothing.
return;
}
visit::walk_fn_ret_ty(self, ret_ty);
}

fn visit_expr(&mut self, e: &'a ast::Expr) {
Expand Down Expand Up @@ -489,7 +493,7 @@ impl<'a> Visitor<'a> for PostExpansionVisitor<'a> {
pub fn check_crate(krate: &ast::Crate, sess: &Session, features: &Features) {
maybe_stage_features(sess, features, krate);
check_incompatible_features(sess, features);
let mut visitor = PostExpansionVisitor { sess, features };
let mut visitor = PostExpansionVisitor { sess, features, is_in_generics: false };

let spans = sess.parse_sess.gated_spans.spans.borrow();
macro_rules! gate_all {
Expand Down

0 comments on commit a06ebec

Please sign in to comment.