aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorOwen Avery <powerboat9.gamer@gmail.com>2023-03-15 16:35:47 -0400
committerArthur Cohen <arthur.cohen@embecosm.com>2024-01-16 18:21:12 +0100
commit265d8555fe3ad38755e64a6b9880521c7f3a3cc7 (patch)
treefff5e9683b2eb2b4da0fb2d23a5448980145dfc8 /gcc
parentf821a019e624555397b539e864cc145057922a63 (diff)
downloadgcc-265d8555fe3ad38755e64a6b9880521c7f3a3cc7.zip
gcc-265d8555fe3ad38755e64a6b9880521c7f3a3cc7.tar.gz
gcc-265d8555fe3ad38755e64a6b9880521c7f3a3cc7.tar.bz2
gccrs: Unify HIR::IfExprConseqIf{,Let} into HIR::IfExprConseqElse
This should simplify 'if' expression handling to match future simplifications to 'if let' expression handling. gcc/rust/ChangeLog: * typecheck/rust-hir-type-check-expr.cc (TypeCheckExpr::visit): Remove IfExprConseqIf visitor. * typecheck/rust-hir-type-check-expr.h (TypeCheckExpr::visit): Remove IfExprConseqIf{,Let} visitor. * backend/rust-compile-block.cc (CompileConditionalBlocks::visit): Remove IfExprConseqIf visitor. * backend/rust-compile-block.h (CompileConditionalBlocks::visit): Remove IfExprConseqIf{,Let} visitors. (CompileExprWithBlock::visit): Remove IfExprConseqIf{,Let} visitors, implement BlockExpr visitor. * backend/rust-compile-expr.cc (CompileExpr::visit): Remove IfExprConseqIf visitor. * backend/rust-compile-expr.h (CompileExpr::visit): Remove IfExprConseqIf{,Let} visitors. * checks/lints/rust-lint-marklive.h (MarkLive::visit): Remove IfExprConseqIf visitor. * checks/errors/rust-const-checker.cc (ConstChecker::visit): Remove IfExprConseqIf{,Let} visitors. * checks/errors/rust-const-checker.h (ConstChecker::visit): Remove IfExprConseqIf{,Let} visitors. * checks/errors/rust-unsafe-checker.cc (UnsafeChecker::visit): Remove IfExprConseqIf{,Let} visitors. * checks/errors/rust-unsafe-checker.h (UnsafeChecker::visit): Remove IfExprConseqIf{,Let} visitors. * checks/errors/privacy/rust-privacy-reporter.cc (PrivacyReporter::visit): Remove IfExprConseqIf{,Let} visitors. * checks/errors/privacy/rust-privacy-reporter.h (PrivacyReporter::visit): Remove IfExprConseqIf{,Let} visitors. * hir/tree/rust-hir-expr.h (class IfExprConseqElse): Make else_block ExprWithBlock. (class IfExprConseqIf): Remove. (class IfExprConseqIfLet): Remove. * hir/tree/rust-hir-full-decls.h (class IfExprConseqIf): Remove. (class IfExprConseqIfLet): Remove. * hir/tree/rust-hir.cc (IfExprConseqElse::as_string): Adjust output. (IfExprConseqIf::as_string): Remove. (IfExprConseqIfLet::as_string): Remove. (IfExprConseqIf::accept_vis): Remove. (IfExprConseqIfLet::accept_vis): Remove. * hir/tree/rust-hir-visitor.h (HIRFullVisitor::visit): Remove IfExprConseqIf{,Let} visitors. (HIRFullVisitorBase::visit): Remove IfExprConseqIf{,Let} visitors. (HIRExpressionVisitor::visit): Remove IfExprConseqIf{,Let} visitors. * hir/rust-hir-dump.cc (Dump::visit): Remove IfExprConseqIf{,Let} visitors. * hir/rust-hir-dump.h (Dump::visit): Remove IfExprConseqIf{,Let} visitors. * hir/rust-ast-lower.cc (ASTLoweringIfBlock::visit): Replace HIR::IfExprConseqIf with HIR::IfExprConseqElse. Signed-off-by: Owen Avery <powerboat9.gamer@gmail.com>
Diffstat (limited to 'gcc')
-rw-r--r--gcc/rust/backend/rust-compile-block.cc22
-rw-r--r--gcc/rust/backend/rust-compile-block.h8
-rw-r--r--gcc/rust/backend/rust-compile-expr.cc37
-rw-r--r--gcc/rust/backend/rust-compile-expr.h2
-rw-r--r--gcc/rust/checks/errors/privacy/rust-privacy-reporter.cc17
-rw-r--r--gcc/rust/checks/errors/privacy/rust-privacy-reporter.h2
-rw-r--r--gcc/rust/checks/errors/rust-const-checker.cc17
-rw-r--r--gcc/rust/checks/errors/rust-const-checker.h2
-rw-r--r--gcc/rust/checks/errors/rust-unsafe-checker.cc17
-rw-r--r--gcc/rust/checks/errors/rust-unsafe-checker.h2
-rw-r--r--gcc/rust/checks/lints/rust-lint-marklive.h7
-rw-r--r--gcc/rust/hir/rust-ast-lower.cc9
-rw-r--r--gcc/rust/hir/rust-hir-dump.cc6
-rw-r--r--gcc/rust/hir/rust-hir-dump.h2
-rw-r--r--gcc/rust/hir/tree/rust-hir-expr.h146
-rw-r--r--gcc/rust/hir/tree/rust-hir-full-decls.h2
-rw-r--r--gcc/rust/hir/tree/rust-hir-visitor.h6
-rw-r--r--gcc/rust/hir/tree/rust-hir.cc46
-rw-r--r--gcc/rust/typecheck/rust-hir-type-check-expr.cc23
-rw-r--r--gcc/rust/typecheck/rust-hir-type-check-expr.h2
20 files changed, 16 insertions, 359 deletions
diff --git a/gcc/rust/backend/rust-compile-block.cc b/gcc/rust/backend/rust-compile-block.cc
index 3942571..470ece2 100644
--- a/gcc/rust/backend/rust-compile-block.cc
+++ b/gcc/rust/backend/rust-compile-block.cc
@@ -118,33 +118,19 @@ CompileConditionalBlocks::visit (HIR::IfExprConseqElse &expr)
tree fndecl = fnctx.fndecl;
tree condition_expr = CompileExpr::Compile (expr.get_if_condition (), ctx);
tree then_block = CompileBlock::compile (expr.get_if_block (), ctx, result);
- tree else_block = CompileBlock::compile (expr.get_else_block (), ctx, result);
-
- translated
- = ctx->get_backend ()->if_statement (fndecl, condition_expr, then_block,
- else_block, expr.get_locus ());
-}
-
-void
-CompileConditionalBlocks::visit (HIR::IfExprConseqIf &expr)
-{
- fncontext fnctx = ctx->peek_fn ();
- tree fndecl = fnctx.fndecl;
- tree condition_expr = CompileExpr::Compile (expr.get_if_condition (), ctx);
- tree then_block = CompileBlock::compile (expr.get_if_block (), ctx, result);
// else block
std::vector<Bvariable *> locals;
- Location start_location = expr.get_conseq_if_expr ()->get_locus ();
- Location end_location = expr.get_conseq_if_expr ()->get_locus (); // FIXME
+ Location start_location = expr.get_else_block ()->get_locus ();
+ Location end_location = expr.get_else_block ()->get_locus (); // FIXME
tree enclosing_scope = ctx->peek_enclosing_scope ();
tree else_block = ctx->get_backend ()->block (fndecl, enclosing_scope, locals,
start_location, end_location);
ctx->push_block (else_block);
tree else_stmt_decl
- = CompileConditionalBlocks::compile (expr.get_conseq_if_expr (), ctx,
- result);
+ = CompileExprWithBlock::compile (expr.get_else_block (), ctx, result);
+
ctx->add_statement (else_stmt_decl);
ctx->pop_block ();
diff --git a/gcc/rust/backend/rust-compile-block.h b/gcc/rust/backend/rust-compile-block.h
index 8c23d02..4f293af 100644
--- a/gcc/rust/backend/rust-compile-block.h
+++ b/gcc/rust/backend/rust-compile-block.h
@@ -52,7 +52,6 @@ public:
void visit (HIR::IfExpr &expr) override;
void visit (HIR::IfExprConseqElse &expr) override;
- void visit (HIR::IfExprConseqIf &expr) override;
// Empty visit for unused Expression HIR nodes.
void visit (HIR::PathInExpression &) override {}
@@ -97,7 +96,6 @@ public:
void visit (HIR::WhileLoopExpr &) override {}
void visit (HIR::WhileLetLoopExpr &) override {}
void visit (HIR::ForLoopExpr &) override {}
- void visit (HIR::IfExprConseqIfLet &) override {}
void visit (HIR::IfLetExpr &) override {}
void visit (HIR::IfLetExprConseqElse &) override {}
void visit (HIR::IfLetExprConseqIf &) override {}
@@ -137,9 +135,9 @@ public:
translated = CompileConditionalBlocks::compile (&expr, ctx, result);
}
- void visit (HIR::IfExprConseqIf &expr) override
+ void visit (HIR::BlockExpr &expr) override
{
- translated = CompileConditionalBlocks::compile (&expr, ctx, result);
+ translated = CompileBlock::compile (&expr, ctx, result);
}
// Empty visit for unused Expression HIR nodes.
@@ -170,7 +168,6 @@ public:
void visit (HIR::CallExpr &) override {}
void visit (HIR::MethodCallExpr &) override {}
void visit (HIR::FieldAccessExpr &) override {}
- void visit (HIR::BlockExpr &) override {}
void visit (HIR::ContinueExpr &) override {}
void visit (HIR::BreakExpr &) override {}
void visit (HIR::RangeFromToExpr &) override {}
@@ -185,7 +182,6 @@ public:
void visit (HIR::WhileLoopExpr &) override {}
void visit (HIR::WhileLetLoopExpr &) override {}
void visit (HIR::ForLoopExpr &) override {}
- void visit (HIR::IfExprConseqIfLet &) override {}
void visit (HIR::IfLetExpr &) override {}
void visit (HIR::IfLetExprConseqElse &) override {}
void visit (HIR::IfLetExprConseqIf &) override {}
diff --git a/gcc/rust/backend/rust-compile-expr.cc b/gcc/rust/backend/rust-compile-expr.cc
index e138e41..962135b 100644
--- a/gcc/rust/backend/rust-compile-expr.cc
+++ b/gcc/rust/backend/rust-compile-expr.cc
@@ -345,43 +345,6 @@ CompileExpr::visit (HIR::IfExprConseqElse &expr)
}
void
-CompileExpr::visit (HIR::IfExprConseqIf &expr)
-{
- TyTy::BaseType *if_type = nullptr;
- if (!ctx->get_tyctx ()->lookup_type (expr.get_mappings ().get_hirid (),
- &if_type))
- {
- rust_error_at (expr.get_locus (),
- "failed to lookup type of IfExprConseqElse");
- return;
- }
-
- Bvariable *tmp = NULL;
- bool needs_temp = !if_type->is_unit ();
- if (needs_temp)
- {
- fncontext fnctx = ctx->peek_fn ();
- tree enclosing_scope = ctx->peek_enclosing_scope ();
- tree block_type = TyTyResolveCompile::compile (ctx, if_type);
-
- bool is_address_taken = false;
- tree ret_var_stmt = nullptr;
- tmp = ctx->get_backend ()->temporary_variable (
- fnctx.fndecl, enclosing_scope, block_type, NULL, is_address_taken,
- expr.get_locus (), &ret_var_stmt);
- ctx->add_statement (ret_var_stmt);
- }
-
- auto stmt = CompileConditionalBlocks::compile (&expr, ctx, tmp);
- ctx->add_statement (stmt);
-
- if (tmp != NULL)
- {
- translated = ctx->get_backend ()->var_expression (tmp, expr.get_locus ());
- }
-}
-
-void
CompileExpr::visit (HIR::BlockExpr &expr)
{
TyTy::BaseType *block_tyty = nullptr;
diff --git a/gcc/rust/backend/rust-compile-expr.h b/gcc/rust/backend/rust-compile-expr.h
index 8bac0bc..363dc49 100644
--- a/gcc/rust/backend/rust-compile-expr.h
+++ b/gcc/rust/backend/rust-compile-expr.h
@@ -45,7 +45,6 @@ public:
void visit (HIR::NegationExpr &expr) override;
void visit (HIR::TypeCastExpr &expr) override;
void visit (HIR::IfExpr &expr) override;
- void visit (HIR::IfExprConseqIf &expr) override;
void visit (HIR::IfExprConseqElse &expr) override;
void visit (HIR::BlockExpr &expr) override;
void visit (HIR::UnsafeBlockExpr &expr) override;
@@ -77,7 +76,6 @@ public:
// TODO
// these need to be sugared in the HIR to if statements and a match
void visit (HIR::WhileLetLoopExpr &) override {}
- void visit (HIR::IfExprConseqIfLet &) override {}
void visit (HIR::IfLetExpr &) override {}
void visit (HIR::IfLetExprConseqElse &) override {}
void visit (HIR::IfLetExprConseqIf &) override {}
diff --git a/gcc/rust/checks/errors/privacy/rust-privacy-reporter.cc b/gcc/rust/checks/errors/privacy/rust-privacy-reporter.cc
index 1ea9fa6..41d4d3a 100644
--- a/gcc/rust/checks/errors/privacy/rust-privacy-reporter.cc
+++ b/gcc/rust/checks/errors/privacy/rust-privacy-reporter.cc
@@ -547,23 +547,6 @@ PrivacyReporter::visit (HIR::IfExprConseqElse &expr)
}
void
-PrivacyReporter::visit (HIR::IfExprConseqIf &expr)
-{
- expr.get_if_condition ()->accept_vis (*this);
- expr.get_if_block ()->accept_vis (*this);
- expr.get_conseq_if_expr ()->accept_vis (*this);
-}
-
-void
-PrivacyReporter::visit (HIR::IfExprConseqIfLet &expr)
-{
- expr.get_if_condition ()->accept_vis (*this);
- expr.get_if_block ()->accept_vis (*this);
-
- // TODO: We need to visit the if_let_expr as well
-}
-
-void
PrivacyReporter::visit (HIR::IfLetExpr &)
{
// TODO: We need to visit the if_let_expr
diff --git a/gcc/rust/checks/errors/privacy/rust-privacy-reporter.h b/gcc/rust/checks/errors/privacy/rust-privacy-reporter.h
index 7ebd0a8..8843bf5 100644
--- a/gcc/rust/checks/errors/privacy/rust-privacy-reporter.h
+++ b/gcc/rust/checks/errors/privacy/rust-privacy-reporter.h
@@ -122,8 +122,6 @@ types
virtual void visit (HIR::ForLoopExpr &expr);
virtual void visit (HIR::IfExpr &expr);
virtual void visit (HIR::IfExprConseqElse &expr);
- virtual void visit (HIR::IfExprConseqIf &expr);
- virtual void visit (HIR::IfExprConseqIfLet &expr);
virtual void visit (HIR::IfLetExpr &expr);
virtual void visit (HIR::IfLetExprConseqElse &expr);
virtual void visit (HIR::IfLetExprConseqIf &expr);
diff --git a/gcc/rust/checks/errors/rust-const-checker.cc b/gcc/rust/checks/errors/rust-const-checker.cc
index 99f092e..c051019 100644
--- a/gcc/rust/checks/errors/rust-const-checker.cc
+++ b/gcc/rust/checks/errors/rust-const-checker.cc
@@ -500,23 +500,6 @@ ConstChecker::visit (IfExprConseqElse &expr)
}
void
-ConstChecker::visit (IfExprConseqIf &expr)
-{
- expr.get_if_condition ()->accept_vis (*this);
- expr.get_if_block ()->accept_vis (*this);
- expr.get_conseq_if_expr ()->accept_vis (*this);
-}
-
-void
-ConstChecker::visit (IfExprConseqIfLet &expr)
-{
- expr.get_if_condition ()->accept_vis (*this);
- expr.get_if_block ()->accept_vis (*this);
-
- // TODO: Visit conseq if let expression
-}
-
-void
ConstChecker::visit (IfLetExpr &expr)
{
expr.get_scrutinee_expr ()->accept_vis (*this);
diff --git a/gcc/rust/checks/errors/rust-const-checker.h b/gcc/rust/checks/errors/rust-const-checker.h
index 8d60b30..1ad4944 100644
--- a/gcc/rust/checks/errors/rust-const-checker.h
+++ b/gcc/rust/checks/errors/rust-const-checker.h
@@ -129,8 +129,6 @@ private:
virtual void visit (ForLoopExpr &expr) override;
virtual void visit (IfExpr &expr) override;
virtual void visit (IfExprConseqElse &expr) override;
- virtual void visit (IfExprConseqIf &expr) override;
- virtual void visit (IfExprConseqIfLet &expr) override;
virtual void visit (IfLetExpr &expr) override;
virtual void visit (IfLetExprConseqElse &expr) override;
virtual void visit (IfLetExprConseqIf &expr) override;
diff --git a/gcc/rust/checks/errors/rust-unsafe-checker.cc b/gcc/rust/checks/errors/rust-unsafe-checker.cc
index bf41648..558b8ee 100644
--- a/gcc/rust/checks/errors/rust-unsafe-checker.cc
+++ b/gcc/rust/checks/errors/rust-unsafe-checker.cc
@@ -602,23 +602,6 @@ UnsafeChecker::visit (IfExprConseqElse &expr)
}
void
-UnsafeChecker::visit (IfExprConseqIf &expr)
-{
- expr.get_if_condition ()->accept_vis (*this);
- expr.get_if_block ()->accept_vis (*this);
- expr.get_conseq_if_expr ()->accept_vis (*this);
-}
-
-void
-UnsafeChecker::visit (IfExprConseqIfLet &expr)
-{
- expr.get_if_condition ()->accept_vis (*this);
- expr.get_if_block ()->accept_vis (*this);
-
- // TODO: Visit conseq if let expression
-}
-
-void
UnsafeChecker::visit (IfLetExpr &expr)
{
expr.get_scrutinee_expr ()->accept_vis (*this);
diff --git a/gcc/rust/checks/errors/rust-unsafe-checker.h b/gcc/rust/checks/errors/rust-unsafe-checker.h
index 257cb45..b81f59d 100644
--- a/gcc/rust/checks/errors/rust-unsafe-checker.h
+++ b/gcc/rust/checks/errors/rust-unsafe-checker.h
@@ -111,8 +111,6 @@ private:
virtual void visit (ForLoopExpr &expr) override;
virtual void visit (IfExpr &expr) override;
virtual void visit (IfExprConseqElse &expr) override;
- virtual void visit (IfExprConseqIf &expr) override;
- virtual void visit (IfExprConseqIfLet &expr) override;
virtual void visit (IfLetExpr &expr) override;
virtual void visit (IfLetExprConseqElse &expr) override;
virtual void visit (IfLetExprConseqIf &expr) override;
diff --git a/gcc/rust/checks/lints/rust-lint-marklive.h b/gcc/rust/checks/lints/rust-lint-marklive.h
index 386f300..6fb4467 100644
--- a/gcc/rust/checks/lints/rust-lint-marklive.h
+++ b/gcc/rust/checks/lints/rust-lint-marklive.h
@@ -222,13 +222,6 @@ public:
}
}
- void visit (HIR::IfExprConseqIf &expr) override
- {
- expr.get_if_condition ()->accept_vis (*this);
- expr.get_if_block ()->accept_vis (*this);
- expr.get_conseq_if_expr ()->accept_vis (*this);
- }
-
void visit (HIR::TraitItemFunc &item) override
{
item.get_block_expr ()->accept_vis (*this);
diff --git a/gcc/rust/hir/rust-ast-lower.cc b/gcc/rust/hir/rust-ast-lower.cc
index e5f6639..e3e6a21 100644
--- a/gcc/rust/hir/rust-ast-lower.cc
+++ b/gcc/rust/hir/rust-ast-lower.cc
@@ -221,11 +221,10 @@ ASTLoweringIfBlock::visit (AST::IfExprConseqIf &expr)
mappings->get_next_hir_id (crate_num),
UNKNOWN_LOCAL_DEFID);
- translated
- = new HIR::IfExprConseqIf (mapping, std::unique_ptr<HIR::Expr> (condition),
- std::unique_ptr<HIR::BlockExpr> (block),
- std::unique_ptr<HIR::IfExpr> (conseq_if_expr),
- expr.get_locus ());
+ translated = new HIR::IfExprConseqElse (
+ mapping, std::unique_ptr<HIR::Expr> (condition),
+ std::unique_ptr<HIR::BlockExpr> (block),
+ std::unique_ptr<HIR::ExprWithBlock> (conseq_if_expr), expr.get_locus ());
}
void
diff --git a/gcc/rust/hir/rust-hir-dump.cc b/gcc/rust/hir/rust-hir-dump.cc
index dba1544..ca8bc57 100644
--- a/gcc/rust/hir/rust-hir-dump.cc
+++ b/gcc/rust/hir/rust-hir-dump.cc
@@ -309,12 +309,6 @@ void
Dump::visit (IfExprConseqElse &)
{}
void
-Dump::visit (IfExprConseqIf &)
-{}
-void
-Dump::visit (IfExprConseqIfLet &)
-{}
-void
Dump::visit (IfLetExpr &)
{}
void
diff --git a/gcc/rust/hir/rust-hir-dump.h b/gcc/rust/hir/rust-hir-dump.h
index 5f9ee1e..1ace2be 100644
--- a/gcc/rust/hir/rust-hir-dump.h
+++ b/gcc/rust/hir/rust-hir-dump.h
@@ -96,8 +96,6 @@ private:
virtual void visit (ForLoopExpr &) override;
virtual void visit (IfExpr &) override;
virtual void visit (IfExprConseqElse &) override;
- virtual void visit (IfExprConseqIf &) override;
- virtual void visit (IfExprConseqIfLet &) override;
virtual void visit (IfLetExpr &) override;
virtual void visit (IfLetExprConseqElse &) override;
virtual void visit (IfLetExprConseqIf &) override;
diff --git a/gcc/rust/hir/tree/rust-hir-expr.h b/gcc/rust/hir/tree/rust-hir-expr.h
index 1ed97ef..b93040a 100644
--- a/gcc/rust/hir/tree/rust-hir-expr.h
+++ b/gcc/rust/hir/tree/rust-hir-expr.h
@@ -3276,7 +3276,7 @@ protected:
// If expression with an ending "else" expression HIR node (trailing)
class IfExprConseqElse : public IfExpr
{
- std::unique_ptr<BlockExpr> else_block;
+ std::unique_ptr<ExprWithBlock> else_block;
public:
std::string as_string () const override;
@@ -3284,7 +3284,7 @@ public:
IfExprConseqElse (Analysis::NodeMapping mappings,
std::unique_ptr<Expr> condition,
std::unique_ptr<BlockExpr> if_block,
- std::unique_ptr<BlockExpr> else_block, Location locus)
+ std::unique_ptr<ExprWithBlock> else_block, Location locus)
: IfExpr (std::move (mappings), std::move (condition), std::move (if_block),
locus),
else_block (std::move (else_block))
@@ -3293,7 +3293,7 @@ public:
// Copy constructor with clone
IfExprConseqElse (IfExprConseqElse const &other)
- : IfExpr (other), else_block (other.else_block->clone_block_expr ())
+ : IfExpr (other), else_block (other.else_block->clone_expr_with_block ())
{}
// Overloaded assignment operator with cloning
@@ -3302,7 +3302,7 @@ public:
IfExpr::operator= (other);
// condition = other.condition->clone_expr();
// if_block = other.if_block->clone_block_expr();
- else_block = other.else_block->clone_block_expr ();
+ else_block = other.else_block->clone_expr_with_block ();
return *this;
}
@@ -3316,7 +3316,7 @@ public:
void vis_else_block (HIRFullVisitor &vis) { else_block->accept_vis (vis); }
- BlockExpr *get_else_block () { return else_block.get (); }
+ ExprWithBlock *get_else_block () { return else_block.get (); }
protected:
/* Use covariance to implement clone function as returning this object rather
@@ -3341,77 +3341,6 @@ protected:
}
};
-// If expression with an ending "else if" expression HIR node
-class IfExprConseqIf : public IfExpr
-{
- std::unique_ptr<IfExpr> conseq_if_expr;
-
-public:
- std::string as_string () const override;
-
- IfExprConseqIf (Analysis::NodeMapping mappings,
- std::unique_ptr<Expr> condition,
- std::unique_ptr<BlockExpr> if_block,
- std::unique_ptr<IfExpr> conseq_if_expr, Location locus)
- : IfExpr (std::move (mappings), std::move (condition), std::move (if_block),
- locus),
- conseq_if_expr (std::move (conseq_if_expr))
- {}
- // outer attributes not allowed
-
- // Copy constructor with clone
- IfExprConseqIf (IfExprConseqIf const &other)
- : IfExpr (other), conseq_if_expr (other.conseq_if_expr->clone_if_expr ())
- {}
-
- // Overloaded assignment operator to use clone
- IfExprConseqIf &operator= (IfExprConseqIf const &other)
- {
- IfExpr::operator= (other);
- // condition = other.condition->clone_expr();
- // if_block = other.if_block->clone_block_expr();
- conseq_if_expr = other.conseq_if_expr->clone_if_expr ();
-
- return *this;
- }
-
- // move constructors
- IfExprConseqIf (IfExprConseqIf &&other) = default;
- IfExprConseqIf &operator= (IfExprConseqIf &&other) = default;
-
- void accept_vis (HIRFullVisitor &vis) override;
- void accept_vis (HIRExpressionVisitor &vis) override;
-
- void vis_conseq_if_expr (HIRFullVisitor &vis)
- {
- conseq_if_expr->accept_vis (vis);
- }
-
- IfExpr *get_conseq_if_expr () { return conseq_if_expr.get (); }
-
-protected:
- /* Use covariance to implement clone function as returning this object rather
- * than base */
- IfExprConseqIf *clone_expr_impl () const override
- {
- return new IfExprConseqIf (*this);
- }
-
- /* Use covariance to implement clone function as returning this object rather
- * than base */
- IfExprConseqIf *clone_expr_with_block_impl () const override
- {
- return new IfExprConseqIf (*this);
- }
-
- /* Use covariance to implement clone function as returning this object rather
- * than base */
- IfExprConseqIf *clone_if_expr_impl () const override
- {
- return new IfExprConseqIf (*this);
- }
-};
-
// Basic "if let" expression HIR node with no else
class IfLetExpr : public ExprWithBlock
{
@@ -3515,71 +3444,6 @@ protected:
}
};
-// If expression with an ending "else if let" expression HIR node
-class IfExprConseqIfLet : public IfExpr
-{
- std::unique_ptr<IfLetExpr> if_let_expr;
-
-public:
- std::string as_string () const override;
-
- IfExprConseqIfLet (Analysis::NodeMapping mappings,
- std::unique_ptr<Expr> condition,
- std::unique_ptr<BlockExpr> if_block,
- std::unique_ptr<IfLetExpr> conseq_if_let_expr,
- Location locus)
- : IfExpr (std::move (mappings), std::move (condition), std::move (if_block),
- locus),
- if_let_expr (std::move (conseq_if_let_expr))
- {}
- // outer attributes not allowed
-
- // Copy constructor with clone
- IfExprConseqIfLet (IfExprConseqIfLet const &other)
- : IfExpr (other), if_let_expr (other.if_let_expr->clone_if_let_expr ())
- {}
-
- // Overloaded assignment operator to use clone
- IfExprConseqIfLet &operator= (IfExprConseqIfLet const &other)
- {
- IfExpr::operator= (other);
- // condition = other.condition->clone_expr();
- // if_block = other.if_block->clone_block_expr();
- if_let_expr = other.if_let_expr->clone_if_let_expr ();
-
- return *this;
- }
-
- // move constructors
- IfExprConseqIfLet (IfExprConseqIfLet &&other) = default;
- IfExprConseqIfLet &operator= (IfExprConseqIfLet &&other) = default;
-
- void accept_vis (HIRFullVisitor &vis) override;
- void accept_vis (HIRExpressionVisitor &vis) override;
-
-protected:
- /* Use covariance to implement clone function as returning this object rather
- * than base */
- IfExprConseqIfLet *clone_expr_impl () const override
- {
- return new IfExprConseqIfLet (*this);
- }
-
- /* Use covariance to implement clone function as returning this object rather
- * than base */
- IfExprConseqIfLet *clone_expr_with_block_impl () const override
- {
- return new IfExprConseqIfLet (*this);
- }
-
- /* Use covariance to implement clone function as returning this object rather
- * than base */
- IfExprConseqIfLet *clone_if_expr_impl () const override
- {
- return new IfExprConseqIfLet (*this);
- }
-};
-
/* HIR node representing "if let" expression with an "else" expression at the
* end */
class IfLetExprConseqElse : public IfLetExpr
diff --git a/gcc/rust/hir/tree/rust-hir-full-decls.h b/gcc/rust/hir/tree/rust-hir-full-decls.h
index 32c5c43..64ffe5f 100644
--- a/gcc/rust/hir/tree/rust-hir-full-decls.h
+++ b/gcc/rust/hir/tree/rust-hir-full-decls.h
@@ -117,9 +117,7 @@ class WhileLetLoopExpr;
class ForLoopExpr;
class IfExpr;
class IfExprConseqElse;
-class IfExprConseqIf;
class IfLetExpr;
-class IfExprConseqIfLet;
class IfLetExprConseqElse;
class IfLetExprConseqIf;
class IfLetExprConseqIfLet;
diff --git a/gcc/rust/hir/tree/rust-hir-visitor.h b/gcc/rust/hir/tree/rust-hir-visitor.h
index f516f05..e597983 100644
--- a/gcc/rust/hir/tree/rust-hir-visitor.h
+++ b/gcc/rust/hir/tree/rust-hir-visitor.h
@@ -81,8 +81,6 @@ public:
virtual void visit (ForLoopExpr &expr) = 0;
virtual void visit (IfExpr &expr) = 0;
virtual void visit (IfExprConseqElse &expr) = 0;
- virtual void visit (IfExprConseqIf &expr) = 0;
- virtual void visit (IfExprConseqIfLet &expr) = 0;
virtual void visit (IfLetExpr &expr) = 0;
virtual void visit (IfLetExprConseqElse &expr) = 0;
virtual void visit (IfLetExprConseqIf &expr) = 0;
@@ -224,8 +222,6 @@ public:
virtual void visit (ForLoopExpr &) override {}
virtual void visit (IfExpr &) override {}
virtual void visit (IfExprConseqElse &) override {}
- virtual void visit (IfExprConseqIf &) override {}
- virtual void visit (IfExprConseqIfLet &) override {}
virtual void visit (IfLetExpr &) override {}
virtual void visit (IfLetExprConseqElse &) override {}
virtual void visit (IfLetExprConseqIf &) override {}
@@ -460,8 +456,6 @@ public:
virtual void visit (ForLoopExpr &expr) = 0;
virtual void visit (IfExpr &expr) = 0;
virtual void visit (IfExprConseqElse &expr) = 0;
- virtual void visit (IfExprConseqIf &expr) = 0;
- virtual void visit (IfExprConseqIfLet &expr) = 0;
virtual void visit (IfLetExpr &expr) = 0;
virtual void visit (IfLetExprConseqElse &expr) = 0;
virtual void visit (IfLetExprConseqIf &expr) = 0;
diff --git a/gcc/rust/hir/tree/rust-hir.cc b/gcc/rust/hir/tree/rust-hir.cc
index 926712c..96ec5a2 100644
--- a/gcc/rust/hir/tree/rust-hir.cc
+++ b/gcc/rust/hir/tree/rust-hir.cc
@@ -1525,27 +1525,7 @@ IfExprConseqElse::as_string () const
{
std::string str = IfExpr::as_string ();
- str += "\n Else block expr: " + else_block->as_string ();
-
- return str;
-}
-
-std::string
-IfExprConseqIf::as_string () const
-{
- std::string str = IfExpr::as_string ();
-
- str += "\n Else if expr: \n " + conseq_if_expr->as_string ();
-
- return str;
-}
-
-std::string
-IfExprConseqIfLet::as_string () const
-{
- std::string str = IfExpr::as_string ();
-
- str += "\n Else if let expr: \n " + if_let_expr->as_string ();
+ str += "\n Else expr: " + else_block->as_string ();
return str;
}
@@ -4138,18 +4118,6 @@ IfExprConseqElse::accept_vis (HIRFullVisitor &vis)
}
void
-IfExprConseqIf::accept_vis (HIRFullVisitor &vis)
-{
- vis.visit (*this);
-}
-
-void
-IfExprConseqIfLet::accept_vis (HIRFullVisitor &vis)
-{
- vis.visit (*this);
-}
-
-void
IfLetExpr::accept_vis (HIRFullVisitor &vis)
{
vis.visit (*this);
@@ -4948,18 +4916,6 @@ IfLetExpr::accept_vis (HIRExpressionVisitor &vis)
}
void
-IfExprConseqIfLet::accept_vis (HIRExpressionVisitor &vis)
-{
- vis.visit (*this);
-}
-
-void
-IfExprConseqIf::accept_vis (HIRExpressionVisitor &vis)
-{
- vis.visit (*this);
-}
-
-void
IfExprConseqElse::accept_vis (HIRExpressionVisitor &vis)
{
vis.visit (*this);
diff --git a/gcc/rust/typecheck/rust-hir-type-check-expr.cc b/gcc/rust/typecheck/rust-hir-type-check-expr.cc
index fc85c01..6a510ee 100644
--- a/gcc/rust/typecheck/rust-hir-type-check-expr.cc
+++ b/gcc/rust/typecheck/rust-hir-type-check-expr.cc
@@ -470,29 +470,6 @@ TypeCheckExpr::visit (HIR::IfExprConseqElse &expr)
}
void
-TypeCheckExpr::visit (HIR::IfExprConseqIf &expr)
-{
- TypeCheckExpr::Resolve (expr.get_if_condition ());
- auto if_blk_resolved = TypeCheckExpr::Resolve (expr.get_if_block ());
- auto else_blk_resolved = TypeCheckExpr::Resolve (expr.get_conseq_if_expr ());
-
- if (if_blk_resolved->get_kind () == TyTy::NEVER)
- infered = else_blk_resolved;
- else if (else_blk_resolved->get_kind () == TyTy::NEVER)
- infered = if_blk_resolved;
- else
- {
- infered = unify_site (
- expr.get_mappings ().get_hirid (),
- TyTy::TyWithLocation (if_blk_resolved,
- expr.get_if_block ()->get_locus ()),
- TyTy::TyWithLocation (else_blk_resolved,
- expr.get_conseq_if_expr ()->get_locus ()),
- expr.get_locus ());
- }
-}
-
-void
TypeCheckExpr::visit (HIR::IfLetExpr &expr)
{
// this needs to perform a least upper bound coercion on the blocks and then
diff --git a/gcc/rust/typecheck/rust-hir-type-check-expr.h b/gcc/rust/typecheck/rust-hir-type-check-expr.h
index 997fc56..0940f8d 100644
--- a/gcc/rust/typecheck/rust-hir-type-check-expr.h
+++ b/gcc/rust/typecheck/rust-hir-type-check-expr.h
@@ -44,7 +44,6 @@ public:
void visit (HIR::NegationExpr &expr) override;
void visit (HIR::IfExpr &expr) override;
void visit (HIR::IfExprConseqElse &expr) override;
- void visit (HIR::IfExprConseqIf &expr) override;
void visit (HIR::IfLetExpr &expr) override;
void visit (HIR::BlockExpr &expr) override;
void visit (HIR::UnsafeBlockExpr &expr) override;
@@ -76,7 +75,6 @@ public:
void visit (HIR::RangeToInclExpr &) override {}
void visit (HIR::WhileLetLoopExpr &) override {}
void visit (HIR::ForLoopExpr &) override {}
- void visit (HIR::IfExprConseqIfLet &) override {}
void visit (HIR::IfLetExprConseqElse &) override {}
void visit (HIR::IfLetExprConseqIf &) override {}
void visit (HIR::IfLetExprConseqIfLet &) override {}