https://gcc.gnu.org/g:1160e4b7e1c4e254f01107d8d5ef513ddccc7388

commit r15-8833-g1160e4b7e1c4e254f01107d8d5ef513ddccc7388
Author: Arthur Cohen <arthur.co...@embecosm.com>
Date:   Thu Jan 23 11:44:33 2025 +0000

    gccrs: lower: Error out when lowering ErrorPropagationExpr
    
    Adapt functions for lowering nodes that should never reach the lowering 
phase to cause an
    unreachable, and mark them as final so as it not possible to override them 
in other visitors.
    
    gcc/rust/ChangeLog:
    
            * hir/rust-ast-lower-base.cc: Adapt functions for 
ErrorPropagationExpr and MacroInvocation.
            * hir/rust-ast-lower-base.h: Mark them as final.
            * hir/rust-ast-lower-expr.cc: Remove previous definition for those 
overrides.
            * hir/rust-ast-lower-expr.h: Likewise.

Diff:
---
 gcc/rust/hir/rust-ast-lower-base.cc |  13 +-
 gcc/rust/hir/rust-ast-lower-base.h  | 356 ++++++++++++++++++------------------
 gcc/rust/hir/rust-ast-lower-expr.cc |  15 --
 gcc/rust/hir/rust-ast-lower-expr.h  |   1 -
 4 files changed, 188 insertions(+), 197 deletions(-)

diff --git a/gcc/rust/hir/rust-ast-lower-base.cc 
b/gcc/rust/hir/rust-ast-lower-base.cc
index f38697cf316c..c1fef3d7a207 100644
--- a/gcc/rust/hir/rust-ast-lower-base.cc
+++ b/gcc/rust/hir/rust-ast-lower-base.cc
@@ -23,6 +23,7 @@
 #include "rust-ast.h"
 #include "rust-attribute-values.h"
 #include "rust-diagnostics.h"
+#include "rust-expr.h"
 #include "rust-item.h"
 #include "rust-system.h"
 #include "rust-attributes.h"
@@ -30,7 +31,6 @@
 namespace Rust {
 namespace HIR {
 
-// We special case lowering macro invocations as that should NEVER happen
 void
 ASTLoweringBase::visit (AST::MacroInvocation &invoc)
 {
@@ -38,6 +38,14 @@ ASTLoweringBase::visit (AST::MacroInvocation &invoc)
   rust_unreachable ();
 }
 
+void
+ASTLoweringBase::visit (AST::ErrorPropagationExpr &expr)
+{
+  rust_fatal_error (expr.get_locus (),
+                   "missing desugar for question mark operator");
+  rust_unreachable ();
+}
+
 void
 ASTLoweringBase::visit (AST::Token &)
 {}
@@ -116,9 +124,6 @@ void
 ASTLoweringBase::visit (AST::DereferenceExpr &)
 {}
 void
-ASTLoweringBase::visit (AST::ErrorPropagationExpr &)
-{}
-void
 ASTLoweringBase::visit (AST::NegationExpr &)
 {}
 void
diff --git a/gcc/rust/hir/rust-ast-lower-base.h 
b/gcc/rust/hir/rust-ast-lower-base.h
index 1bd1343bd166..b3bb174babfe 100644
--- a/gcc/rust/hir/rust-ast-lower-base.h
+++ b/gcc/rust/hir/rust-ast-lower-base.h
@@ -60,202 +60,204 @@ class ASTLoweringBase : public AST::ASTVisitor
 public:
   virtual ~ASTLoweringBase () {}
 
+  // Special casing nodes that should never reach the HIR lowering stage
+  virtual void visit (AST::MacroInvocation &) override final;
+  virtual void visit (AST::ErrorPropagationExpr &) override final;
+
   // visitor impl
   // rust-ast.h
   //  virtual void visit(AttrInput& attr_input);
   //  virtual void visit(TokenTree& token_tree);
   //  virtual void visit(MacroMatch& macro_match);
-  virtual void visit (AST::Token &tok);
-  virtual void visit (AST::DelimTokenTree &delim_tok_tree);
-  virtual void visit (AST::AttrInputMetaItemContainer &input);
-  //  virtual void visit(MetaItem& meta_item);
-  //  void vsit(Stmt& stmt);
-  //  virtual void visit(Expr& expr);
-  virtual void visit (AST::IdentifierExpr &ident_expr);
-  //  virtual void visit(Pattern& pattern);
-  //  virtual void visit(Type& type);
-  //  virtual void visit(TypeParamBound& type_param_bound);
-  virtual void visit (AST::Lifetime &lifetime);
-  //  virtual void visit(GenericParam& generic_param);
-  virtual void visit (AST::LifetimeParam &lifetime_param);
-  virtual void visit (AST::ConstGenericParam &const_param);
-  //  virtual void visit(TraitItem& trait_item);
-  //  virtual void visit(InherentImplItem& inherent_impl_item);
-  //  virtual void visit(TraitImplItem& trait_impl_item);
+  virtual void visit (AST::Token &tok) override;
+  virtual void visit (AST::DelimTokenTree &delim_tok_tree) override;
+  virtual void visit (AST::AttrInputMetaItemContainer &input) override;
+  //  virtual void visit(MetaItem& meta_item) override;
+  //  void vsit(Stmt& stmt) override;
+  //  virtual void visit(Expr& expr) override;
+  virtual void visit (AST::IdentifierExpr &ident_expr) override;
+  //  virtual void visit(Pattern& pattern) override;
+  //  virtual void visit(Type& type) override;
+  //  virtual void visit(TypeParamBound& type_param_bound) override;
+  virtual void visit (AST::Lifetime &lifetime) override;
+  //  virtual void visit(GenericParam& generic_param) override;
+  virtual void visit (AST::LifetimeParam &lifetime_param) override;
+  virtual void visit (AST::ConstGenericParam &const_param) override;
+  //  virtual void visit(TraitItem& trait_item) override;
+  //  virtual void visit(InherentImplItem& inherent_impl_item) override;
+  //  virtual void visit(TraitImplItem& trait_impl_item) override;
 
   // rust-path.h
-  virtual void visit (AST::PathInExpression &path);
-  virtual void visit (AST::TypePathSegment &segment);
-  virtual void visit (AST::TypePathSegmentGeneric &segment);
-  virtual void visit (AST::TypePathSegmentFunction &segment);
-  virtual void visit (AST::TypePath &path);
-  virtual void visit (AST::QualifiedPathInExpression &path);
-  virtual void visit (AST::QualifiedPathInType &path);
+  virtual void visit (AST::PathInExpression &path) override;
+  virtual void visit (AST::TypePathSegment &segment) override;
+  virtual void visit (AST::TypePathSegmentGeneric &segment) override;
+  virtual void visit (AST::TypePathSegmentFunction &segment) override;
+  virtual void visit (AST::TypePath &path) override;
+  virtual void visit (AST::QualifiedPathInExpression &path) override;
+  virtual void visit (AST::QualifiedPathInType &path) override;
 
   // rust-expr.h
-  virtual void visit (AST::LiteralExpr &expr);
-  virtual void visit (AST::AttrInputLiteral &attr_input);
-  virtual void visit (AST::AttrInputMacro &attr_input);
-  virtual void visit (AST::MetaItemLitExpr &meta_item);
-  virtual void visit (AST::MetaItemPathLit &meta_item);
-  virtual void visit (AST::BorrowExpr &expr);
-  virtual void visit (AST::DereferenceExpr &expr);
-  virtual void visit (AST::ErrorPropagationExpr &expr);
-  virtual void visit (AST::NegationExpr &expr);
-  virtual void visit (AST::ArithmeticOrLogicalExpr &expr);
-  virtual void visit (AST::ComparisonExpr &expr);
-  virtual void visit (AST::LazyBooleanExpr &expr);
-  virtual void visit (AST::TypeCastExpr &expr);
-  virtual void visit (AST::AssignmentExpr &expr);
-  virtual void visit (AST::CompoundAssignmentExpr &expr);
-  virtual void visit (AST::GroupedExpr &expr);
-  //  virtual void visit(ArrayElems& elems);
-  virtual void visit (AST::ArrayElemsValues &elems);
-  virtual void visit (AST::ArrayElemsCopied &elems);
-  virtual void visit (AST::ArrayExpr &expr);
-  virtual void visit (AST::ArrayIndexExpr &expr);
-  virtual void visit (AST::TupleExpr &expr);
-  virtual void visit (AST::TupleIndexExpr &expr);
-  virtual void visit (AST::StructExprStruct &expr);
-  //  virtual void visit(StructExprField& field);
-  virtual void visit (AST::StructExprFieldIdentifier &field);
-  virtual void visit (AST::StructExprFieldIdentifierValue &field);
-  virtual void visit (AST::StructExprFieldIndexValue &field);
-  virtual void visit (AST::StructExprStructFields &expr);
-  virtual void visit (AST::StructExprStructBase &expr);
-  virtual void visit (AST::CallExpr &expr);
-  virtual void visit (AST::MethodCallExpr &expr);
-  virtual void visit (AST::FieldAccessExpr &expr);
-  virtual void visit (AST::ClosureExprInner &expr);
-  virtual void visit (AST::BlockExpr &expr);
-  virtual void visit (AST::ClosureExprInnerTyped &expr);
-  virtual void visit (AST::ContinueExpr &expr);
-  virtual void visit (AST::BreakExpr &expr);
-  virtual void visit (AST::RangeFromToExpr &expr);
-  virtual void visit (AST::RangeFromExpr &expr);
-  virtual void visit (AST::RangeToExpr &expr);
-  virtual void visit (AST::RangeFullExpr &expr);
-  virtual void visit (AST::RangeFromToInclExpr &expr);
-  virtual void visit (AST::RangeToInclExpr &expr);
-  virtual void visit (AST::BoxExpr &expr);
-  virtual void visit (AST::ReturnExpr &expr);
-  virtual void visit (AST::UnsafeBlockExpr &expr);
-  virtual void visit (AST::LoopExpr &expr);
-  virtual void visit (AST::WhileLoopExpr &expr);
-  virtual void visit (AST::WhileLetLoopExpr &expr);
-  virtual void visit (AST::ForLoopExpr &expr);
-  virtual void visit (AST::IfExpr &expr);
-  virtual void visit (AST::IfExprConseqElse &expr);
-  virtual void visit (AST::IfLetExpr &expr);
-  virtual void visit (AST::IfLetExprConseqElse &expr);
-  virtual void visit (AST::InlineAsm &expr);
-  //  virtual void visit(MatchCase& match_case);
-  // virtual void visit (AST::MatchCaseBlockExpr &match_case);
-  // virtual void visit (AST::MatchCaseExpr &match_case);
-  virtual void visit (AST::MatchExpr &expr);
-  virtual void visit (AST::AwaitExpr &expr);
-  virtual void visit (AST::AsyncBlockExpr &expr);
+  virtual void visit (AST::LiteralExpr &expr) override;
+  virtual void visit (AST::AttrInputLiteral &attr_input) override;
+  virtual void visit (AST::AttrInputMacro &attr_input) override;
+  virtual void visit (AST::MetaItemLitExpr &meta_item) override;
+  virtual void visit (AST::MetaItemPathLit &meta_item) override;
+  virtual void visit (AST::BorrowExpr &expr) override;
+  virtual void visit (AST::DereferenceExpr &expr) override;
+  virtual void visit (AST::NegationExpr &expr) override;
+  virtual void visit (AST::ArithmeticOrLogicalExpr &expr) override;
+  virtual void visit (AST::ComparisonExpr &expr) override;
+  virtual void visit (AST::LazyBooleanExpr &expr) override;
+  virtual void visit (AST::TypeCastExpr &expr) override;
+  virtual void visit (AST::AssignmentExpr &expr) override;
+  virtual void visit (AST::CompoundAssignmentExpr &expr) override;
+  virtual void visit (AST::GroupedExpr &expr) override;
+  //  virtual void visit(ArrayElems& elems) override;
+  virtual void visit (AST::ArrayElemsValues &elems) override;
+  virtual void visit (AST::ArrayElemsCopied &elems) override;
+  virtual void visit (AST::ArrayExpr &expr) override;
+  virtual void visit (AST::ArrayIndexExpr &expr) override;
+  virtual void visit (AST::TupleExpr &expr) override;
+  virtual void visit (AST::TupleIndexExpr &expr) override;
+  virtual void visit (AST::StructExprStruct &expr) override;
+  //  virtual void visit(StructExprField& field) override;
+  virtual void visit (AST::StructExprFieldIdentifier &field) override;
+  virtual void visit (AST::StructExprFieldIdentifierValue &field) override;
+  virtual void visit (AST::StructExprFieldIndexValue &field) override;
+  virtual void visit (AST::StructExprStructFields &expr) override;
+  virtual void visit (AST::StructExprStructBase &expr) override;
+  virtual void visit (AST::CallExpr &expr) override;
+  virtual void visit (AST::MethodCallExpr &expr) override;
+  virtual void visit (AST::FieldAccessExpr &expr) override;
+  virtual void visit (AST::ClosureExprInner &expr) override;
+  virtual void visit (AST::BlockExpr &expr) override;
+  virtual void visit (AST::ClosureExprInnerTyped &expr) override;
+  virtual void visit (AST::ContinueExpr &expr) override;
+  virtual void visit (AST::BreakExpr &expr) override;
+  virtual void visit (AST::RangeFromToExpr &expr) override;
+  virtual void visit (AST::RangeFromExpr &expr) override;
+  virtual void visit (AST::RangeToExpr &expr) override;
+  virtual void visit (AST::RangeFullExpr &expr) override;
+  virtual void visit (AST::RangeFromToInclExpr &expr) override;
+  virtual void visit (AST::RangeToInclExpr &expr) override;
+  virtual void visit (AST::BoxExpr &expr) override;
+  virtual void visit (AST::ReturnExpr &expr) override;
+  virtual void visit (AST::UnsafeBlockExpr &expr) override;
+  virtual void visit (AST::LoopExpr &expr) override;
+  virtual void visit (AST::WhileLoopExpr &expr) override;
+  virtual void visit (AST::WhileLetLoopExpr &expr) override;
+  virtual void visit (AST::ForLoopExpr &expr) override;
+  virtual void visit (AST::IfExpr &expr) override;
+  virtual void visit (AST::IfExprConseqElse &expr) override;
+  virtual void visit (AST::IfLetExpr &expr) override;
+  virtual void visit (AST::IfLetExprConseqElse &expr) override;
+  virtual void visit (AST::InlineAsm &expr) override;
+  //  virtual void visit(MatchCase& match_case) override;
+  // virtual void visit (AST::MatchCaseBlockExpr &match_case) override;
+  // virtual void visit (AST::MatchCaseExpr &match_case) override;
+  virtual void visit (AST::MatchExpr &expr) override;
+  virtual void visit (AST::AwaitExpr &expr) override;
+  virtual void visit (AST::AsyncBlockExpr &expr) override;
 
   // rust-item.h
-  virtual void visit (AST::TypeParam &param);
-  //  virtual void visit(WhereClauseItem& item);
-  virtual void visit (AST::LifetimeWhereClauseItem &item);
-  virtual void visit (AST::TypeBoundWhereClauseItem &item);
-  virtual void visit (AST::Module &module);
-  virtual void visit (AST::ExternCrate &crate);
-  //  virtual void visit(UseTree& use_tree);
-  virtual void visit (AST::UseTreeGlob &use_tree);
-  virtual void visit (AST::UseTreeList &use_tree);
-  virtual void visit (AST::UseTreeRebind &use_tree);
-  virtual void visit (AST::UseDeclaration &use_decl);
-  virtual void visit (AST::Function &function);
-  virtual void visit (AST::TypeAlias &type_alias);
-  virtual void visit (AST::StructStruct &struct_item);
-  virtual void visit (AST::TupleStruct &tuple_struct);
-  virtual void visit (AST::EnumItem &item);
-  virtual void visit (AST::EnumItemTuple &item);
-  virtual void visit (AST::EnumItemStruct &item);
-  virtual void visit (AST::EnumItemDiscriminant &item);
-  virtual void visit (AST::Enum &enum_item);
-  virtual void visit (AST::Union &union_item);
-  virtual void visit (AST::ConstantItem &const_item);
-  virtual void visit (AST::StaticItem &static_item);
-  virtual void visit (AST::TraitItemConst &item);
-  virtual void visit (AST::TraitItemType &item);
-  virtual void visit (AST::Trait &trait);
-  virtual void visit (AST::InherentImpl &impl);
-  virtual void visit (AST::TraitImpl &impl);
-  //  virtual void visit(ExternalItem& item);
-  virtual void visit (AST::ExternalTypeItem &item);
-  virtual void visit (AST::ExternalStaticItem &item);
-  virtual void visit (AST::ExternBlock &block);
+  virtual void visit (AST::TypeParam &param) override;
+  //  virtual void visit(WhereClauseItem& item) override;
+  virtual void visit (AST::LifetimeWhereClauseItem &item) override;
+  virtual void visit (AST::TypeBoundWhereClauseItem &item) override;
+  virtual void visit (AST::Module &module) override;
+  virtual void visit (AST::ExternCrate &crate) override;
+  //  virtual void visit(UseTree& use_tree) override;
+  virtual void visit (AST::UseTreeGlob &use_tree) override;
+  virtual void visit (AST::UseTreeList &use_tree) override;
+  virtual void visit (AST::UseTreeRebind &use_tree) override;
+  virtual void visit (AST::UseDeclaration &use_decl) override;
+  virtual void visit (AST::Function &function) override;
+  virtual void visit (AST::TypeAlias &type_alias) override;
+  virtual void visit (AST::StructStruct &struct_item) override;
+  virtual void visit (AST::TupleStruct &tuple_struct) override;
+  virtual void visit (AST::EnumItem &item) override;
+  virtual void visit (AST::EnumItemTuple &item) override;
+  virtual void visit (AST::EnumItemStruct &item) override;
+  virtual void visit (AST::EnumItemDiscriminant &item) override;
+  virtual void visit (AST::Enum &enum_item) override;
+  virtual void visit (AST::Union &union_item) override;
+  virtual void visit (AST::ConstantItem &const_item) override;
+  virtual void visit (AST::StaticItem &static_item) override;
+  virtual void visit (AST::TraitItemConst &item) override;
+  virtual void visit (AST::TraitItemType &item) override;
+  virtual void visit (AST::Trait &trait) override;
+  virtual void visit (AST::InherentImpl &impl) override;
+  virtual void visit (AST::TraitImpl &impl) override;
+  //  virtual void visit(ExternalItem& item) override;
+  virtual void visit (AST::ExternalTypeItem &item) override;
+  virtual void visit (AST::ExternalStaticItem &item) override;
+  virtual void visit (AST::ExternBlock &block) override;
 
   // rust-macro.h
-  virtual void visit (AST::MacroMatchFragment &match);
-  virtual void visit (AST::MacroMatchRepetition &match);
-  virtual void visit (AST::MacroMatcher &matcher);
-  virtual void visit (AST::MacroRulesDefinition &rules_def);
-  virtual void visit (AST::MacroInvocation &macro_invoc);
-  virtual void visit (AST::MetaItemPath &meta_item);
-  virtual void visit (AST::MetaItemSeq &meta_item);
-  virtual void visit (AST::MetaWord &meta_item);
-  virtual void visit (AST::MetaNameValueStr &meta_item);
-  virtual void visit (AST::MetaListPaths &meta_item);
-  virtual void visit (AST::MetaListNameValueStr &meta_item);
+  virtual void visit (AST::MacroMatchFragment &match) override;
+  virtual void visit (AST::MacroMatchRepetition &match) override;
+  virtual void visit (AST::MacroMatcher &matcher) override;
+  virtual void visit (AST::MacroRulesDefinition &rules_def) override;
+  virtual void visit (AST::MetaItemPath &meta_item) override;
+  virtual void visit (AST::MetaItemSeq &meta_item) override;
+  virtual void visit (AST::MetaWord &meta_item) override;
+  virtual void visit (AST::MetaNameValueStr &meta_item) override;
+  virtual void visit (AST::MetaListPaths &meta_item) override;
+  virtual void visit (AST::MetaListNameValueStr &meta_item) override;
 
   // rust-pattern.h
-  virtual void visit (AST::LiteralPattern &pattern);
-  virtual void visit (AST::IdentifierPattern &pattern);
-  virtual void visit (AST::WildcardPattern &pattern);
-  virtual void visit (AST::RestPattern &pattern);
-  //  virtual void visit(RangePatternBound& bound);
-  virtual void visit (AST::RangePatternBoundLiteral &bound);
-  virtual void visit (AST::RangePatternBoundPath &bound);
-  virtual void visit (AST::RangePatternBoundQualPath &bound);
-  virtual void visit (AST::RangePattern &pattern);
-  virtual void visit (AST::ReferencePattern &pattern);
-  //  virtual void visit(StructPatternField& field);
-  virtual void visit (AST::StructPatternFieldTuplePat &field);
-  virtual void visit (AST::StructPatternFieldIdentPat &field);
-  virtual void visit (AST::StructPatternFieldIdent &field);
-  virtual void visit (AST::StructPattern &pattern);
-  //  virtual void visit(TupleStructItems& tuple_items);
-  virtual void visit (AST::TupleStructItemsNoRange &tuple_items);
-  virtual void visit (AST::TupleStructItemsRange &tuple_items);
-  virtual void visit (AST::TupleStructPattern &pattern);
-  //  virtual void visit(TuplePatternItems& tuple_items);
-  virtual void visit (AST::TuplePatternItemsMultiple &tuple_items);
-  virtual void visit (AST::TuplePatternItemsRanged &tuple_items);
-  virtual void visit (AST::TuplePattern &pattern);
-  virtual void visit (AST::GroupedPattern &pattern);
-  virtual void visit (AST::SlicePattern &pattern);
-  virtual void visit (AST::AltPattern &pattern);
+  virtual void visit (AST::LiteralPattern &pattern) override;
+  virtual void visit (AST::IdentifierPattern &pattern) override;
+  virtual void visit (AST::WildcardPattern &pattern) override;
+  virtual void visit (AST::RestPattern &pattern) override;
+  //  virtual void visit(RangePatternBound& bound) override;
+  virtual void visit (AST::RangePatternBoundLiteral &bound) override;
+  virtual void visit (AST::RangePatternBoundPath &bound) override;
+  virtual void visit (AST::RangePatternBoundQualPath &bound) override;
+  virtual void visit (AST::RangePattern &pattern) override;
+  virtual void visit (AST::ReferencePattern &pattern) override;
+  //  virtual void visit(StructPatternField& field) override;
+  virtual void visit (AST::StructPatternFieldTuplePat &field) override;
+  virtual void visit (AST::StructPatternFieldIdentPat &field) override;
+  virtual void visit (AST::StructPatternFieldIdent &field) override;
+  virtual void visit (AST::StructPattern &pattern) override;
+  //  virtual void visit(TupleStructItems& tuple_items) override;
+  virtual void visit (AST::TupleStructItemsNoRange &tuple_items) override;
+  virtual void visit (AST::TupleStructItemsRange &tuple_items) override;
+  virtual void visit (AST::TupleStructPattern &pattern) override;
+  //  virtual void visit(TuplePatternItems& tuple_items) override;
+  virtual void visit (AST::TuplePatternItemsMultiple &tuple_items) override;
+  virtual void visit (AST::TuplePatternItemsRanged &tuple_items) override;
+  virtual void visit (AST::TuplePattern &pattern) override;
+  virtual void visit (AST::GroupedPattern &pattern) override;
+  virtual void visit (AST::SlicePattern &pattern) override;
+  virtual void visit (AST::AltPattern &pattern) override;
 
   // rust-stmt.h
-  virtual void visit (AST::EmptyStmt &stmt);
-  virtual void visit (AST::LetStmt &stmt);
-  virtual void visit (AST::ExprStmt &stmt);
+  virtual void visit (AST::EmptyStmt &stmt) override;
+  virtual void visit (AST::LetStmt &stmt) override;
+  virtual void visit (AST::ExprStmt &stmt) override;
 
   // rust-type.h
-  virtual void visit (AST::TraitBound &bound);
-  virtual void visit (AST::ImplTraitType &type);
-  virtual void visit (AST::TraitObjectType &type);
-  virtual void visit (AST::ParenthesisedType &type);
-  virtual void visit (AST::ImplTraitTypeOneBound &type);
-  virtual void visit (AST::TraitObjectTypeOneBound &type);
-  virtual void visit (AST::TupleType &type);
-  virtual void visit (AST::NeverType &type);
-  virtual void visit (AST::RawPointerType &type);
-  virtual void visit (AST::ReferenceType &type);
-  virtual void visit (AST::ArrayType &type);
-  virtual void visit (AST::SliceType &type);
-  virtual void visit (AST::InferredType &type);
-  virtual void visit (AST::BareFunctionType &type);
-  virtual void visit (AST::FunctionParam &param);
-  virtual void visit (AST::VariadicParam &param);
-  virtual void visit (AST::SelfParam &param);
-
-  virtual void visit (AST::FormatArgs &fmt);
+  virtual void visit (AST::TraitBound &bound) override;
+  virtual void visit (AST::ImplTraitType &type) override;
+  virtual void visit (AST::TraitObjectType &type) override;
+  virtual void visit (AST::ParenthesisedType &type) override;
+  virtual void visit (AST::ImplTraitTypeOneBound &type) override;
+  virtual void visit (AST::TraitObjectTypeOneBound &type) override;
+  virtual void visit (AST::TupleType &type) override;
+  virtual void visit (AST::NeverType &type) override;
+  virtual void visit (AST::RawPointerType &type) override;
+  virtual void visit (AST::ReferenceType &type) override;
+  virtual void visit (AST::ArrayType &type) override;
+  virtual void visit (AST::SliceType &type) override;
+  virtual void visit (AST::InferredType &type) override;
+  virtual void visit (AST::BareFunctionType &type) override;
+  virtual void visit (AST::FunctionParam &param) override;
+  virtual void visit (AST::VariadicParam &param) override;
+  virtual void visit (AST::SelfParam &param) override;
+
+  virtual void visit (AST::FormatArgs &fmt) override;
 
 protected:
   ASTLoweringBase ()
diff --git a/gcc/rust/hir/rust-ast-lower-expr.cc 
b/gcc/rust/hir/rust-ast-lower-expr.cc
index 4603bfc96084..9f363c0b5043 100644
--- a/gcc/rust/hir/rust-ast-lower-expr.cc
+++ b/gcc/rust/hir/rust-ast-lower-expr.cc
@@ -683,21 +683,6 @@ ASTLoweringExpr::visit (AST::DereferenceExpr &expr)
                                expr.get_outer_attrs (), expr.get_locus ());
 }
 
-void
-ASTLoweringExpr::visit (AST::ErrorPropagationExpr &expr)
-{
-  HIR::Expr *propagating_expr
-    = ASTLoweringExpr::translate (expr.get_propagating_expr ());
-
-  auto crate_num = mappings.get_current_crate ();
-  Analysis::NodeMapping mapping (crate_num, expr.get_node_id (),
-                                mappings.get_next_hir_id (crate_num),
-                                UNKNOWN_LOCAL_DEFID);
-  translated = new HIR::ErrorPropagationExpr (
-    mapping, std::unique_ptr<HIR::Expr> (propagating_expr),
-    expr.get_outer_attrs (), expr.get_locus ());
-}
-
 void
 ASTLoweringExpr::visit (AST::MatchExpr &expr)
 {
diff --git a/gcc/rust/hir/rust-ast-lower-expr.h 
b/gcc/rust/hir/rust-ast-lower-expr.h
index fc53786613b3..af60e017af4f 100644
--- a/gcc/rust/hir/rust-ast-lower-expr.h
+++ b/gcc/rust/hir/rust-ast-lower-expr.h
@@ -113,7 +113,6 @@ public:
   void visit (AST::ContinueExpr &expr) override;
   void visit (AST::BorrowExpr &expr) override;
   void visit (AST::DereferenceExpr &expr) override;
-  void visit (AST::ErrorPropagationExpr &expr) override;
   void visit (AST::MatchExpr &expr) override;
   void visit (AST::RangeFromToExpr &expr) override;
   void visit (AST::RangeFromExpr &expr) override;

Reply via email to