aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArthur Cohen <arthur.cohen@embecosm.com>2025-01-23 11:44:33 +0000
committerCohenArthur <arthur.cohen@embecosm.com>2025-02-26 16:00:58 +0000
commit8dc275b79db6a89ea0a1218edd74af1b259c774e (patch)
treedc546417316f4955c62be53cf50dd17c33b58213
parent950a19345184306f09d0018c83828b0445d8f5a2 (diff)
downloadgcc-8dc275b79db6a89ea0a1218edd74af1b259c774e.zip
gcc-8dc275b79db6a89ea0a1218edd74af1b259c774e.tar.gz
gcc-8dc275b79db6a89ea0a1218edd74af1b259c774e.tar.bz2
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.
-rw-r--r--gcc/rust/hir/rust-ast-lower-base.cc13
-rw-r--r--gcc/rust/hir/rust-ast-lower-base.h356
-rw-r--r--gcc/rust/hir/rust-ast-lower-expr.cc15
-rw-r--r--gcc/rust/hir/rust-ast-lower-expr.h1
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 ce8a20e..52781da 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)
{
@@ -39,6 +39,14 @@ ASTLoweringBase::visit (AST::MacroInvocation &invoc)
}
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 &)
{}
void
@@ -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 b197b4a..a3e786f 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 46e35ee..d0d004e 100644
--- a/gcc/rust/hir/rust-ast-lower-expr.cc
+++ b/gcc/rust/hir/rust-ast-lower-expr.cc
@@ -684,21 +684,6 @@ ASTLoweringExpr::visit (AST::DereferenceExpr &expr)
}
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)
{
translated = ASTLoweringExprWithBlock::translate (expr, &terminated);
diff --git a/gcc/rust/hir/rust-ast-lower-expr.h b/gcc/rust/hir/rust-ast-lower-expr.h
index 12bb9b1..dd903a0 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;