]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
lower: Error out when lowering ErrorPropagationExpr
authorArthur Cohen <arthur.cohen@embecosm.com>
Thu, 23 Jan 2025 11:44:33 +0000 (11:44 +0000)
committerCohenArthur <arthur.cohen@embecosm.com>
Wed, 26 Feb 2025 16:00:58 +0000 (16:00 +0000)
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.

gcc/rust/hir/rust-ast-lower-base.cc
gcc/rust/hir/rust-ast-lower-base.h
gcc/rust/hir/rust-ast-lower-expr.cc
gcc/rust/hir/rust-ast-lower-expr.h

index ce8a20e60941c815483bf1a2744d6dbcdd6c039d..52781da1eaf5f2ee9c1c9f855fc487fdd6bcfc9d 100644 (file)
@@ -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
index b197b4a1e0c27ed2b37f8da385089b36e3c7b599..a3e786f21eba7a01fb5f5f4ef0c3b56e4068069c 100644 (file)
@@ -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 ()
index 46e35ee7af885b6e8ef019063328a7c1ff922ee4..d0d004e71bfb90e5c3e8b89dad60d753d580fb60 100644 (file)
@@ -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)
 {
index 12bb9b16c4d52e2cb1182ef8389503b6109ac9d9..dd903a0c6e2bc341f9978c0ed3b438c5a5fe63d7 100644 (file)
@@ -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;