Skip to content

Commit 7669e1b

Browse files
hir: Remove EnumItemDiscriminant from HIR
gcc/rust/ChangeLog: * ast/rust-ast-collector.cc (TokenCollector::visit): Removed. * backend/rust-compile-item.h (CompileItem::visit): Remove EnumItemDiscriminant case. * backend/rust-compile-stmt.h (CompileStmt::visit): Remove EnumItemDiscriminant case. * checks/errors/borrowck/rust-bir-builder-expr-stmt.h (BIRBuilderExprStmt::visit): Remove EnumItemDiscriminant case. * checks/errors/borrowck/rust-bir-builder-struct.h (BIRBuilderStruct::visit): Remove EnumItemDiscriminant case. * checks/errors/borrowck/rust-function-collector.h (FunctionCollector::visit): Remove EnumItemDiscriminant case. * checks/errors/privacy/rust-privacy-reporter.cc (PrivacyReporter::visit): Remove EnumItemDiscriminant implementation. * checks/errors/privacy/rust-privacy-reporter.h (PrivacyReporter::visit): Remove EnumItemDiscriminant declaration. * checks/errors/rust-const-checker.cc (ConstChecker::visit): Remove EnumItemDiscriminant implementation. * checks/errors/rust-const-checker.h (ConstChecker::visit): Remove EnumItemDiscriminant declaration. * checks/errors/rust-hir-pattern-analysis.cc (PatternChecker::visit): Remove EnumItemDiscriminant implementation. * checks/errors/rust-hir-pattern-analysis.h (PatternChecker::visit): Remove EnumItemDiscriminant declaration. * checks/errors/rust-unsafe-checker.cc (UnsafeChecker::visit): Remove EnumItemDiscriminant implementation. * checks/errors/rust-unsafe-checker.h (UnsafeChecker::visit): Remove EnumItemDiscriminant declaration. * hir/rust-hir-dump.cc (Dump::visit): Remove EnumItemDiscriminant implementation. * hir/rust-hir-dump.h (Dump::visit): Remove EnumItemDiscriminant declaration. * hir/tree/rust-hir-full-decls.h: Remove EnumItemDiscriminant forward declaration. * hir/tree/rust-hir-item.cc (EnumItemDiscriminant::as_string): Remove implementation. (EnumItemDiscriminant::accept_vis): Remove implementation. * hir/tree/rust-hir-item.h: Remove EnumItemDiscriminant class definition. * hir/tree/rust-hir-visitor.h (HIRFullVisitor::visit): Remove EnumItemDiscriminant declaration. (HIRStmtVisitor::visit): Remove EnumItemDiscriminant declaration. * hir/tree/rust-hir.cc (EnumItemDiscriminant::as_string): Remove implementation. (EnumItemDiscriminant::accept_vis): Remove implementation. * typecheck/rust-hir-type-check-enumitem.cc (TypeCheckEnumItem::Resolve): Remove EnumItemDiscriminant case. (TypeCheckEnumItem::visit): Remove EnumItemDiscriminant implementation. * typecheck/rust-hir-type-check-enumitem.h (TypeCheckEnumItem::visit): Remove EnumItemDiscriminant declaration. * typecheck/rust-hir-type-check-stmt.h (TypeCheckStmt::visit): Remove EnumItemDiscriminant case. Addresses #3340 Signed-off-by: varun-r-mallya <varunrmallya@gmail.com>
1 parent e9ed96b commit 7669e1b

23 files changed

+0
-192
lines changed

gcc/rust/backend/rust-compile-item.h

-1
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,6 @@ class CompileItem : private HIRCompileBase, protected HIR::HIRStmtVisitor
5050
void visit (HIR::EnumItem &) override {}
5151
void visit (HIR::EnumItemTuple &) override {}
5252
void visit (HIR::EnumItemStruct &) override {}
53-
void visit (HIR::EnumItemDiscriminant &) override {}
5453
void visit (HIR::TypePathSegmentFunction &) override {}
5554
void visit (HIR::TypePath &) override {}
5655
void visit (HIR::QualifiedPathInType &) override {}

gcc/rust/backend/rust-compile-stmt.h

-1
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@ class CompileStmt : private HIRCompileBase, protected HIR::HIRStmtVisitor
3838
void visit (HIR::EnumItem &) override {}
3939
void visit (HIR::EnumItemTuple &) override {}
4040
void visit (HIR::EnumItemStruct &) override {}
41-
void visit (HIR::EnumItemDiscriminant &) override {}
4241
void visit (HIR::TypePathSegmentFunction &) override {}
4342
void visit (HIR::TypePath &) override {}
4443
void visit (HIR::QualifiedPathInType &) override {}

gcc/rust/checks/errors/borrowck/rust-bir-builder-expr-stmt.h

-1
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,6 @@ class ExprStmtBuilder final : public AbstractExprBuilder,
134134
void visit (HIR::EnumItemStruct &a_struct) override {}
135135
void visit (HIR::EnumItem &item) override {}
136136
void visit (HIR::TupleStruct &tuple_struct) override {}
137-
void visit (HIR::EnumItemDiscriminant &discriminant) override {}
138137
void visit (HIR::TypePathSegmentFunction &segment) override {}
139138
void visit (HIR::TypePath &path) override {}
140139
void visit (HIR::QualifiedPathInType &path) override {}

gcc/rust/checks/errors/borrowck/rust-bir-builder-struct.h

-1
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,6 @@ class StructBuilder : public AbstractBuilder, public HIR::HIRFullVisitor
176176
void visit (HIR::EnumItem &item) override { rust_unreachable (); }
177177
void visit (HIR::EnumItemTuple &item) override { rust_unreachable (); }
178178
void visit (HIR::EnumItemStruct &item) override { rust_unreachable (); }
179-
void visit (HIR::EnumItemDiscriminant &item) override { rust_unreachable (); }
180179
void visit (HIR::Enum &enum_item) override { rust_unreachable (); }
181180
void visit (HIR::Union &union_item) override { rust_unreachable (); }
182181
void visit (HIR::ConstantItem &const_item) override { rust_unreachable (); }

gcc/rust/checks/errors/borrowck/rust-function-collector.h

-1
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,6 @@ class FunctionCollector : public HIR::HIRFullVisitor
139139
void visit (HIR::EnumItem &item) override {}
140140
void visit (HIR::EnumItemTuple &item) override {}
141141
void visit (HIR::EnumItemStruct &item) override {}
142-
void visit (HIR::EnumItemDiscriminant &item) override {}
143142
void visit (HIR::Enum &enum_item) override {}
144143
void visit (HIR::Union &union_item) override {}
145144
void visit (HIR::ConstantItem &const_item) override {}

gcc/rust/checks/errors/privacy/rust-privacy-reporter.cc

-4
Original file line numberDiff line numberDiff line change
@@ -695,10 +695,6 @@ PrivacyReporter::visit (HIR::EnumItemStruct &)
695695
// TODO: Check the type
696696
}
697697

698-
void
699-
PrivacyReporter::visit (HIR::EnumItemDiscriminant &)
700-
{}
701-
702698
void
703699
PrivacyReporter::visit (HIR::Enum &)
704700
{}

gcc/rust/checks/errors/privacy/rust-privacy-reporter.h

-1
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,6 @@ types
130130
virtual void visit (HIR::EnumItemStruct &);
131131
virtual void visit (HIR::EnumItem &item);
132132
virtual void visit (HIR::TupleStruct &tuple_struct);
133-
virtual void visit (HIR::EnumItemDiscriminant &);
134133
virtual void visit (HIR::TypePathSegmentFunction &segment);
135134
virtual void visit (HIR::TypePath &path);
136135
virtual void visit (HIR::QualifiedPathInType &path);

gcc/rust/checks/errors/rust-const-checker.cc

-10
Original file line numberDiff line numberDiff line change
@@ -631,16 +631,6 @@ void
631631
ConstChecker::visit (EnumItemStruct &)
632632
{}
633633

634-
void
635-
ConstChecker::visit (EnumItemDiscriminant &item)
636-
{
637-
const_context.enter (item.get_mappings ().get_hirid ());
638-
639-
item.get_discriminant_expression ().accept_vis (*this);
640-
641-
const_context.exit ();
642-
}
643-
644634
void
645635
ConstChecker::visit (Enum &enum_item)
646636
{

gcc/rust/checks/errors/rust-const-checker.h

-1
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,6 @@ class ConstChecker : public HIRFullVisitor
150150
virtual void visit (EnumItem &item) override;
151151
virtual void visit (EnumItemTuple &item) override;
152152
virtual void visit (EnumItemStruct &item) override;
153-
virtual void visit (EnumItemDiscriminant &item) override;
154153
virtual void visit (Enum &enum_item) override;
155154
virtual void visit (Union &union_item) override;
156155
virtual void visit (ConstantItem &const_item) override;

gcc/rust/checks/errors/rust-hir-pattern-analysis.cc

-4
Original file line numberDiff line numberDiff line change
@@ -495,10 +495,6 @@ void
495495
PatternChecker::visit (EnumItemStruct &)
496496
{}
497497

498-
void
499-
PatternChecker::visit (EnumItemDiscriminant &)
500-
{}
501-
502498
void
503499
PatternChecker::visit (Enum &)
504500
{}

gcc/rust/checks/errors/rust-hir-pattern-analysis.h

-1
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,6 @@ class PatternChecker : public HIR::HIRFullVisitor
123123
virtual void visit (EnumItem &item) override;
124124
virtual void visit (EnumItemTuple &item) override;
125125
virtual void visit (EnumItemStruct &item) override;
126-
virtual void visit (EnumItemDiscriminant &item) override;
127126
virtual void visit (Enum &enum_item) override;
128127
virtual void visit (Union &union_item) override;
129128
virtual void visit (ConstantItem &const_item) override;

gcc/rust/checks/errors/rust-unsafe-checker.cc

-4
Original file line numberDiff line numberDiff line change
@@ -749,10 +749,6 @@ void
749749
UnsafeChecker::visit (EnumItemStruct &)
750750
{}
751751

752-
void
753-
UnsafeChecker::visit (EnumItemDiscriminant &)
754-
{}
755-
756752
void
757753
UnsafeChecker::visit (Enum &)
758754
{}

gcc/rust/checks/errors/rust-unsafe-checker.h

-1
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,6 @@ class UnsafeChecker : public HIRFullVisitor
131131
virtual void visit (EnumItem &item) override;
132132
virtual void visit (EnumItemTuple &item) override;
133133
virtual void visit (EnumItemStruct &item) override;
134-
virtual void visit (EnumItemDiscriminant &item) override;
135134
virtual void visit (Enum &enum_item) override;
136135
virtual void visit (Union &union_item) override;
137136
virtual void visit (ConstantItem &const_item) override;

gcc/rust/hir/rust-hir-dump.cc

-12
Original file line numberDiff line numberDiff line change
@@ -1814,18 +1814,6 @@ Dump::visit (EnumItemStruct &e)
18141814
end ("EnumItemStruct");
18151815
}
18161816

1817-
void
1818-
Dump::visit (EnumItemDiscriminant &e)
1819-
{
1820-
begin ("EnumItemDiscriminant");
1821-
1822-
do_enumitem (e);
1823-
1824-
visit_field ("discriminant", e.get_discriminant_expression ());
1825-
1826-
end ("EnumItemDiscriminant");
1827-
}
1828-
18291817
void
18301818
Dump::visit (Enum &e)
18311819
{

gcc/rust/hir/rust-hir-dump.h

-1
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,6 @@ class Dump : public HIRFullVisitor
187187
virtual void visit (EnumItem &) override;
188188
virtual void visit (EnumItemTuple &) override;
189189
virtual void visit (EnumItemStruct &) override;
190-
virtual void visit (EnumItemDiscriminant &) override;
191190

192191
virtual void visit (Enum &) override;
193192
virtual void visit (Union &) override;

gcc/rust/hir/tree/rust-hir-full-decls.h

-1
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,6 @@ class TupleStruct;
161161
class EnumItem;
162162
class EnumItemTuple;
163163
class EnumItemStruct;
164-
class EnumItemDiscriminant;
165164
class Enum;
166165
class Union;
167166
class ConstantItem;

gcc/rust/hir/tree/rust-hir-item.cc

-25
Original file line numberDiff line numberDiff line change
@@ -447,31 +447,6 @@ EnumItemStruct::EnumItemStruct (Analysis::NodeMapping mappings,
447447
struct_fields (std::move (struct_fields))
448448
{}
449449

450-
EnumItemDiscriminant::EnumItemDiscriminant (Analysis::NodeMapping mappings,
451-
Identifier variant_name,
452-
std::unique_ptr<Expr> expr,
453-
AST::AttrVec outer_attrs,
454-
location_t locus)
455-
: EnumItem (std::move (mappings), std::move (variant_name),
456-
std::move (outer_attrs), locus),
457-
expression (std::move (expr))
458-
{}
459-
460-
EnumItemDiscriminant::EnumItemDiscriminant (EnumItemDiscriminant const &other)
461-
: EnumItem (other), expression (other.expression->clone_expr ())
462-
{}
463-
464-
EnumItemDiscriminant &
465-
EnumItemDiscriminant::operator= (EnumItemDiscriminant const &other)
466-
{
467-
EnumItem::operator= (other);
468-
expression = other.expression->clone_expr ();
469-
// variant_name = other.variant_name;
470-
// outer_attrs = other.outer_attrs;
471-
472-
return *this;
473-
}
474-
475450
Enum::Enum (Analysis::NodeMapping mappings, Identifier enum_name,
476451
Visibility vis,
477452
std::vector<std::unique_ptr<GenericParam>> generic_params,

gcc/rust/hir/tree/rust-hir-item.h

-45
Original file line numberDiff line numberDiff line change
@@ -1571,51 +1571,6 @@ class EnumItemStruct : public EnumItem
15711571
}
15721572
};
15731573

1574-
// A discriminant (numbered enum) item used in an "enum" tagged union
1575-
class EnumItemDiscriminant : public EnumItem
1576-
{
1577-
std::unique_ptr<Expr> expression;
1578-
1579-
public:
1580-
EnumItemDiscriminant (Analysis::NodeMapping mappings, Identifier variant_name,
1581-
std::unique_ptr<Expr> expr, AST::AttrVec outer_attrs,
1582-
location_t locus);
1583-
1584-
// Copy constructor with clone
1585-
EnumItemDiscriminant (EnumItemDiscriminant const &other);
1586-
1587-
// Overloaded assignment operator to clone
1588-
EnumItemDiscriminant &operator= (EnumItemDiscriminant const &other);
1589-
1590-
// move constructors
1591-
EnumItemDiscriminant (EnumItemDiscriminant &&other) = default;
1592-
EnumItemDiscriminant &operator= (EnumItemDiscriminant &&other) = default;
1593-
1594-
EnumItemKind get_enum_item_kind () const override
1595-
{
1596-
return EnumItemKind::Discriminant;
1597-
}
1598-
1599-
std::string as_string () const override;
1600-
1601-
void accept_vis (HIRFullVisitor &vis) override;
1602-
void accept_vis (HIRStmtVisitor &vis) override;
1603-
1604-
Expr &get_discriminant_expression () { return *expression; }
1605-
1606-
std::unique_ptr<Expr> take_discriminant_expression ()
1607-
{
1608-
return std::move (expression);
1609-
}
1610-
1611-
protected:
1612-
// Clone function implementation as (not pure) virtual method
1613-
EnumItemDiscriminant *clone_item_impl () const override
1614-
{
1615-
return new EnumItemDiscriminant (*this);
1616-
}
1617-
};
1618-
16191574
// HIR node for Rust "enum" - tagged union
16201575
class Enum : public VisItem
16211576
{

gcc/rust/hir/tree/rust-hir-visitor.h

-3
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,6 @@ class HIRFullVisitor
101101
virtual void visit (EnumItem &item) = 0;
102102
virtual void visit (EnumItemTuple &item) = 0;
103103
virtual void visit (EnumItemStruct &item) = 0;
104-
virtual void visit (EnumItemDiscriminant &item) = 0;
105104
virtual void visit (Enum &enum_item) = 0;
106105
virtual void visit (Union &union_item) = 0;
107106
virtual void visit (ConstantItem &const_item) = 0;
@@ -240,7 +239,6 @@ class HIRFullVisitorBase : public HIRFullVisitor
240239
virtual void visit (EnumItem &) override {}
241240
virtual void visit (EnumItemTuple &) override {}
242241
virtual void visit (EnumItemStruct &) override {}
243-
virtual void visit (EnumItemDiscriminant &) override {}
244242
virtual void visit (Enum &) override {}
245243
virtual void visit (Union &) override {}
246244
virtual void visit (ConstantItem &) override {}
@@ -369,7 +367,6 @@ class HIRStmtVisitor
369367
virtual void visit (EnumItemStruct &) = 0;
370368
virtual void visit (EnumItem &item) = 0;
371369
virtual void visit (TupleStruct &tuple_struct) = 0;
372-
virtual void visit (EnumItemDiscriminant &) = 0;
373370
virtual void visit (TypePathSegmentFunction &segment) = 0;
374371
virtual void visit (TypePath &path) = 0;
375372
virtual void visit (QualifiedPathInType &path) = 0;

gcc/rust/hir/tree/rust-hir.cc

-23
Original file line numberDiff line numberDiff line change
@@ -3182,17 +3182,6 @@ StructField::as_string () const
31823182
return str;
31833183
}
31843184

3185-
std::string
3186-
EnumItemDiscriminant::as_string () const
3187-
{
3188-
std::string str = EnumItem::as_string ();
3189-
3190-
// add equal and expression
3191-
str += " = " + expression->as_string ();
3192-
3193-
return str;
3194-
}
3195-
31963185
std::string
31973186
ExternalItem::as_string () const
31983187
{
@@ -4271,12 +4260,6 @@ EnumItemStruct::accept_vis (HIRFullVisitor &vis)
42714260
vis.visit (*this);
42724261
}
42734262

4274-
void
4275-
EnumItemDiscriminant::accept_vis (HIRFullVisitor &vis)
4276-
{
4277-
vis.visit (*this);
4278-
}
4279-
42804263
void
42814264
Enum::accept_vis (HIRFullVisitor &vis)
42824265
{
@@ -4625,12 +4608,6 @@ ExternalStaticItem::accept_vis (HIRExternalItemVisitor &vis)
46254608
vis.visit (*this);
46264609
}
46274610

4628-
void
4629-
EnumItemDiscriminant::accept_vis (HIRStmtVisitor &vis)
4630-
{
4631-
vis.visit (*this);
4632-
}
4633-
46344611
void
46354612
EnumItemStruct::accept_vis (HIRStmtVisitor &vis)
46364613
{

gcc/rust/typecheck/rust-hir-type-check-enumitem.cc

-49
Original file line numberDiff line numberDiff line change
@@ -46,10 +46,6 @@ TypeCheckEnumItem::Resolve (HIR::EnumItem &item, int64_t last_discriminant)
4646
case HIR::EnumItem::EnumItemKind::Struct:
4747
resolver.visit (static_cast<HIR::EnumItemStruct &> (item));
4848
break;
49-
50-
case HIR::EnumItem::EnumItemKind::Discriminant:
51-
resolver.visit (static_cast<HIR::EnumItemDiscriminant &> (item));
52-
break;
5349
}
5450
return resolver.variant;
5551
}
@@ -104,51 +100,6 @@ TypeCheckEnumItem::visit (HIR::EnumItem &item)
104100
std::move (discim_expr));
105101
}
106102

107-
void
108-
TypeCheckEnumItem::visit (HIR::EnumItemDiscriminant &item)
109-
{
110-
if (last_discriminant == INT64_MAX)
111-
rust_error_at (item.get_locus (), "discriminant too big");
112-
113-
auto &discriminant = item.get_discriminant_expression ();
114-
auto capacity_type = TypeCheckExpr::Resolve (discriminant);
115-
if (capacity_type->get_kind () == TyTy::TypeKind::ERROR)
116-
return;
117-
118-
TyTy::ISizeType *expected_ty
119-
= new TyTy::ISizeType (discriminant.get_mappings ().get_hirid ());
120-
context->insert_type (discriminant.get_mappings (), expected_ty);
121-
122-
unify_site (item.get_mappings ().get_hirid (),
123-
TyTy::TyWithLocation (expected_ty),
124-
TyTy::TyWithLocation (capacity_type), item.get_locus ());
125-
126-
tl::optional<CanonicalPath> canonical_path;
127-
128-
if (flag_name_resolution_2_0)
129-
{
130-
auto &nr_ctx
131-
= Resolver2_0::ImmutableNameResolutionContext::get ().resolver ();
132-
133-
canonical_path
134-
= nr_ctx.types.to_canonical_path (item.get_mappings ().get_nodeid ());
135-
}
136-
else
137-
{
138-
canonical_path
139-
= mappings.lookup_canonical_path (item.get_mappings ().get_nodeid ());
140-
}
141-
142-
rust_assert (canonical_path.has_value ());
143-
144-
RustIdent ident{*canonical_path, item.get_locus ()};
145-
variant
146-
= new TyTy::VariantDef (item.get_mappings ().get_hirid (),
147-
item.get_mappings ().get_defid (),
148-
item.get_identifier ().as_string (), ident,
149-
item.get_discriminant_expression ().clone_expr ());
150-
}
151-
152103
void
153104
TypeCheckEnumItem::visit (HIR::EnumItemTuple &item)
154105
{

gcc/rust/typecheck/rust-hir-type-check-enumitem.h

-1
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@ class TypeCheckEnumItem : public TypeCheckBase
3333

3434
protected:
3535
void visit (HIR::EnumItem &item);
36-
void visit (HIR::EnumItemDiscriminant &item);
3736
void visit (HIR::EnumItemTuple &item);
3837
void visit (HIR::EnumItemStruct &item);
3938

gcc/rust/typecheck/rust-hir-type-check-stmt.h

-1
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,6 @@ class TypeCheckStmt : private TypeCheckBase, private HIR::HIRStmtVisitor
6464
void visit (HIR::EnumItemTuple &) override {}
6565
void visit (HIR::EnumItemStruct &) override {}
6666
void visit (HIR::EnumItem &) override {}
67-
void visit (HIR::EnumItemDiscriminant &) override {}
6867

6968
private:
7069
TypeCheckStmt () : TypeCheckBase (), infered (nullptr) {}

0 commit comments

Comments
 (0)