Skip to content

Commit 53d8e04

Browse files
0xn4utilusP-E-P
authored andcommitted
Remove dead code associated with AST::ExternalFunctionItem
gcc/rust/ChangeLog: * ast/rust-ast-collector.cc (TokenCollector::visit): Remove dead code. * ast/rust-ast-collector.h: Likewise. * ast/rust-ast-full-decls.h (class ExternalFunctionItem): Likewise. * ast/rust-ast-visitor.cc (DefaultASTVisitor::visit): Likewise. * ast/rust-ast-visitor.h: Likewise. * ast/rust-ast.cc (ExternalFunctionItem::as_string): Likewise. (ExternalFunctionItem::accept_vis): Likewise. * checks/errors/rust-ast-validation.cc (ASTValidation::visit): Likewise. * checks/errors/rust-ast-validation.h: Likewise. * checks/errors/rust-feature-gate.h: Likewise. * expand/rust-cfg-strip.cc (CfgStrip::visit): Likewise. * expand/rust-cfg-strip.h: Likewise. * expand/rust-derive.h: Likewise. * expand/rust-expand-visitor.cc (ExpandVisitor::visit): Likewise. * expand/rust-expand-visitor.h: Likewise. * hir/rust-ast-lower-base.cc (ASTLoweringBase::visit): Likewise. * hir/rust-ast-lower-base.h: Likewise. * metadata/rust-export-metadata.cc (ExportContext::emit_function): Likewise. * parse/rust-parse-impl.h: Likewise. * parse/rust-parse.h: Likewise. * resolve/rust-ast-resolve-base.cc (ResolverBase::visit): Likewise. * resolve/rust-ast-resolve-base.h: Likewise. * resolve/rust-default-resolver.cc (DefaultResolver::visit): Likewise. * resolve/rust-default-resolver.h: Likewise. * util/rust-attributes.cc (AttributeChecker::visit): Likewise. * util/rust-attributes.h: Likewise. gcc/testsuite/ChangeLog: * rust/compile/extern_func_with_body.rs: New test. Signed-off-by: 0xn4utilus <gyanendrabanjare8@gmail.com>
1 parent 87f797f commit 53d8e04

26 files changed

+7
-335
lines changed

gcc/rust/ast/rust-ast-collector.cc

-25
Original file line numberDiff line numberDiff line change
@@ -2084,31 +2084,6 @@ TokenCollector::visit (ExternalStaticItem &item)
20842084
push (Rust::Token::make (SEMICOLON, UNDEF_LOCATION));
20852085
}
20862086

2087-
void
2088-
TokenCollector::visit (ExternalFunctionItem &function)
2089-
{
2090-
visit_items_as_lines (function.get_outer_attrs ());
2091-
visit (function.get_visibility ());
2092-
2093-
auto id = function.get_identifier ().as_string ();
2094-
2095-
push (Rust::Token::make (FN_KW, function.get_locus ()));
2096-
push (Rust::Token::make_identifier (UNDEF_LOCATION, std::move (id)));
2097-
if (function.has_generics ())
2098-
visit (function.get_generic_params ());
2099-
push (Rust::Token::make (LEFT_PAREN, UNDEF_LOCATION));
2100-
2101-
visit_items_joined_by_separator (function.get_function_params ());
2102-
2103-
push (Rust::Token::make (RIGHT_PAREN, UNDEF_LOCATION));
2104-
if (function.has_return_type ())
2105-
{
2106-
push (Rust::Token::make (RETURN_TYPE, UNDEF_LOCATION));
2107-
visit (function.get_return_type ());
2108-
}
2109-
push (Rust::Token::make (SEMICOLON, UNDEF_LOCATION));
2110-
}
2111-
21122087
void
21132088
TokenCollector::visit (ExternBlock &block)
21142089
{

gcc/rust/ast/rust-ast-collector.h

-1
Original file line numberDiff line numberDiff line change
@@ -333,7 +333,6 @@ class TokenCollector : public ASTVisitor
333333
void visit (TraitImpl &impl);
334334
void visit (ExternalTypeItem &item);
335335
void visit (ExternalStaticItem &item);
336-
void visit (ExternalFunctionItem &item);
337336
void visit (ExternBlock &block);
338337

339338
// rust-macro.h

gcc/rust/ast/rust-ast-full-decls.h

-1
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,6 @@ class ExternalItem;
203203
class ExternalTypeItem;
204204
class ExternalStaticItem;
205205
class NamedFunctionParam;
206-
class ExternalFunctionItem;
207206
class ExternBlock;
208207

209208
// rust-macro.h

gcc/rust/ast/rust-ast-visitor.cc

-18
Original file line numberDiff line numberDiff line change
@@ -1004,24 +1004,6 @@ DefaultASTVisitor::visit (AST::NamedFunctionParam &param)
10041004
visit (param.get_type ());
10051005
}
10061006

1007-
void
1008-
DefaultASTVisitor::visit (AST::ExternalFunctionItem &item)
1009-
{
1010-
visit_outer_attrs (item);
1011-
visit (item.get_visibility ());
1012-
for (auto &generic : item.get_generic_params ())
1013-
visit (generic);
1014-
1015-
if (item.has_where_clause ())
1016-
visit (item.get_where_clause ());
1017-
1018-
for (auto &param : item.get_function_params ())
1019-
visit (param);
1020-
1021-
if (item.has_return_type ())
1022-
visit (item.get_return_type ());
1023-
}
1024-
10251007
void
10261008
DefaultASTVisitor::visit (AST::ExternBlock &block)
10271009
{

gcc/rust/ast/rust-ast-visitor.h

-2
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,6 @@ class ASTVisitor
164164
// virtual void visit(ExternalItem& item) = 0;
165165
virtual void visit (ExternalTypeItem &type) = 0;
166166
virtual void visit (ExternalStaticItem &item) = 0;
167-
virtual void visit (ExternalFunctionItem &item) = 0;
168167
virtual void visit (ExternBlock &block) = 0;
169168

170169
// rust-macro.h
@@ -338,7 +337,6 @@ class DefaultASTVisitor : public ASTVisitor
338337
virtual void visit (AST::TraitImpl &impl) override;
339338
virtual void visit (AST::ExternalTypeItem &item) override;
340339
virtual void visit (AST::ExternalStaticItem &item) override;
341-
virtual void visit (AST::ExternalFunctionItem &item) override;
342340
virtual void visit (AST::ExternBlock &block) override;
343341
virtual void visit (AST::MacroMatchFragment &match) override;
344342
virtual void visit (AST::MacroMatchRepetition &match) override;

gcc/rust/ast/rust-ast.cc

-69
Original file line numberDiff line numberDiff line change
@@ -2974,69 +2974,6 @@ ExternalStaticItem::as_string () const
29742974
return str;
29752975
}
29762976

2977-
std::string
2978-
ExternalFunctionItem::as_string () const
2979-
{
2980-
// outer attributes
2981-
std::string str = append_attributes (outer_attrs, OUTER);
2982-
2983-
// start visibility on new line and with a space
2984-
str += "\n" + visibility.as_string () + " ";
2985-
2986-
str += "fn ";
2987-
2988-
// add name
2989-
str += item_name.as_string ();
2990-
2991-
// generic params
2992-
str += "\n Generic params: ";
2993-
if (generic_params.empty ())
2994-
{
2995-
str += "none";
2996-
}
2997-
else
2998-
{
2999-
for (const auto &param : generic_params)
3000-
{
3001-
// DEBUG: null pointer check
3002-
if (param == nullptr)
3003-
{
3004-
rust_debug (
3005-
"something really terrible has gone wrong - null pointer "
3006-
"generic param in external function item.");
3007-
return "NULL_POINTER_MARK";
3008-
}
3009-
3010-
str += "\n " + param->as_string ();
3011-
}
3012-
}
3013-
3014-
// function params
3015-
str += "\n Function params: ";
3016-
if (function_params.empty ())
3017-
{
3018-
str += "none";
3019-
}
3020-
else
3021-
{
3022-
for (const auto &param : function_params)
3023-
str += "\n " + param.as_string ();
3024-
}
3025-
3026-
// add type on new line
3027-
str += "\n (return) Type: "
3028-
+ (has_return_type () ? return_type->as_string () : "()");
3029-
3030-
// where clause
3031-
str += "\n Where clause: ";
3032-
if (has_where_clause ())
3033-
str += where_clause.as_string ();
3034-
else
3035-
str += "none";
3036-
3037-
return str;
3038-
}
3039-
30402977
std::string
30412978
NamedFunctionParam::as_string () const
30422979
{
@@ -4866,12 +4803,6 @@ ExternalStaticItem::accept_vis (ASTVisitor &vis)
48664803
vis.visit (*this);
48674804
}
48684805

4869-
void
4870-
ExternalFunctionItem::accept_vis (ASTVisitor &vis)
4871-
{
4872-
vis.visit (*this);
4873-
}
4874-
48754806
void
48764807
ExternBlock::accept_vis (ASTVisitor &vis)
48774808
{

gcc/rust/checks/errors/rust-ast-validation.cc

-19
Original file line numberDiff line numberDiff line change
@@ -64,25 +64,6 @@ ASTValidation::visit (AST::ConstantItem &const_item)
6464
AST::ContextualASTVisitor::visit (const_item);
6565
}
6666

67-
void
68-
ASTValidation::visit (AST::ExternalFunctionItem &item)
69-
{
70-
auto &params = item.get_function_params ();
71-
72-
if (params.size () == 1 && params[0].is_variadic ())
73-
rust_error_at (
74-
params[0].get_locus (),
75-
"C-variadic function must be declared with at least one named argument");
76-
77-
for (auto it = params.begin (); it != params.end (); it++)
78-
if (it->is_variadic () && it + 1 != params.end ())
79-
rust_error_at (
80-
it->get_locus (),
81-
"%<...%> must be the last argument of a C-variadic function");
82-
83-
AST::ContextualASTVisitor::visit (item);
84-
}
85-
8667
void
8768
ASTValidation::visit (AST::Union &item)
8869
{

gcc/rust/checks/errors/rust-ast-validation.h

-1
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@ class ASTValidation : public AST::ContextualASTVisitor
3838
virtual void visit (AST::ConstantItem &const_item);
3939
virtual void visit (AST::Lifetime &lifetime);
4040
virtual void visit (AST::LoopLabel &label);
41-
virtual void visit (AST::ExternalFunctionItem &item);
4241
virtual void visit (AST::Union &item);
4342
virtual void visit (AST::Function &function);
4443
virtual void visit (AST::Trait &trait);

gcc/rust/checks/errors/rust-feature-gate.h

-1
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,6 @@ class FeatureGate : public AST::DefaultASTVisitor
130130
void visit (AST::Trait &trait) override {}
131131
void visit (AST::ExternalTypeItem &item) override;
132132
void visit (AST::ExternalStaticItem &item) override {}
133-
void visit (AST::ExternalFunctionItem &item) override {}
134133
void visit (AST::ExternBlock &block) override;
135134
void visit (AST::MacroMatchFragment &match) override {}
136135
void visit (AST::MacroMatchRepetition &match) override {}

gcc/rust/expand/rust-cfg-strip.cc

-56
Original file line numberDiff line numberDiff line change
@@ -2195,62 +2195,6 @@ CfgStrip::visit (AST::ExternalStaticItem &item)
21952195
rust_error_at (type->get_locus (), "cannot strip type in this position");
21962196
}
21972197

2198-
void
2199-
CfgStrip::visit (AST::ExternalFunctionItem &item)
2200-
{
2201-
// strip test based on outer attrs
2202-
expand_cfg_attrs (item.get_outer_attrs ());
2203-
if (fails_cfg_with_expand (item.get_outer_attrs ()))
2204-
{
2205-
item.mark_for_strip ();
2206-
return;
2207-
}
2208-
2209-
AST::DefaultASTVisitor::visit (item);
2210-
2211-
/* strip function parameters if required - this is specifically
2212-
* allowed by spec */
2213-
auto &params = item.get_function_params ();
2214-
for (auto it = params.begin (); it != params.end ();)
2215-
{
2216-
auto &param = *it;
2217-
2218-
auto &param_attrs = param.get_outer_attrs ();
2219-
expand_cfg_attrs (param_attrs);
2220-
if (fails_cfg_with_expand (param_attrs))
2221-
{
2222-
it = params.erase (it);
2223-
continue;
2224-
}
2225-
2226-
if (!param.is_variadic ())
2227-
{
2228-
auto &type = param.get_type ();
2229-
if (type->is_marked_for_strip ())
2230-
rust_error_at (type->get_locus (),
2231-
"cannot strip type in this position");
2232-
}
2233-
2234-
// increment if nothing else happens
2235-
++it;
2236-
}
2237-
/* NOTE: these are extern function params, which may have different
2238-
* rules and restrictions to "normal" function params. So expansion
2239-
* handled separately. */
2240-
2241-
/* TODO: assuming that variadic nature cannot be stripped. If this
2242-
* is not true, then have code here to do so. */
2243-
2244-
if (item.has_return_type ())
2245-
{
2246-
auto &return_type = item.get_return_type ();
2247-
2248-
if (return_type->is_marked_for_strip ())
2249-
rust_error_at (return_type->get_locus (),
2250-
"cannot strip type in this position");
2251-
}
2252-
}
2253-
22542198
void
22552199
CfgStrip::visit (AST::ExternBlock &block)
22562200
{

gcc/rust/expand/rust-cfg-strip.h

-1
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,6 @@ class CfgStrip : public AST::DefaultASTVisitor
150150
void visit (AST::TraitImpl &impl) override;
151151
void visit (AST::ExternalTypeItem &item) override;
152152
void visit (AST::ExternalStaticItem &item) override;
153-
void visit (AST::ExternalFunctionItem &item) override;
154153
void visit (AST::ExternBlock &block) override;
155154

156155
// I don't think it would be possible to strip macros without expansion

gcc/rust/expand/rust-derive.h

-1
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,6 @@ class DeriveVisitor : public AST::ASTVisitor
166166
virtual void visit (TraitImpl &impl) override final{};
167167
virtual void visit (ExternalTypeItem &type) override final{};
168168
virtual void visit (ExternalStaticItem &item) override final{};
169-
virtual void visit (ExternalFunctionItem &item) override final{};
170169
virtual void visit (ExternBlock &block) override final{};
171170
virtual void visit (MacroMatchFragment &match) override final{};
172171
virtual void visit (MacroMatchRepetition &match) override final{};

gcc/rust/expand/rust-expand-visitor.cc

-17
Original file line numberDiff line numberDiff line change
@@ -922,23 +922,6 @@ ExpandVisitor::visit (AST::ExternalStaticItem &static_item)
922922
maybe_expand_type (static_item.get_type ());
923923
}
924924

925-
void
926-
ExpandVisitor::visit (AST::ExternalFunctionItem &item)
927-
{
928-
for (auto &param : item.get_generic_params ())
929-
visit (param);
930-
931-
for (auto &param : item.get_function_params ())
932-
if (!param.is_variadic ())
933-
maybe_expand_type (param.get_type ());
934-
935-
if (item.has_return_type ())
936-
maybe_expand_type (item.get_return_type ());
937-
938-
if (item.has_where_clause ())
939-
expand_where_clause (item.get_where_clause ());
940-
}
941-
942925
void
943926
ExpandVisitor::visit (AST::ExternBlock &block)
944927
{

gcc/rust/expand/rust-expand-visitor.h

-1
Original file line numberDiff line numberDiff line change
@@ -252,7 +252,6 @@ class ExpandVisitor : public AST::DefaultASTVisitor
252252
void visit (AST::TraitImpl &impl) override;
253253
void visit (AST::ExternalTypeItem &item) override;
254254
void visit (AST::ExternalStaticItem &item) override;
255-
void visit (AST::ExternalFunctionItem &item) override;
256255
void visit (AST::ExternBlock &block) override;
257256

258257
// I don't think it would be possible to strip macros without expansion

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

-3
Original file line numberDiff line numberDiff line change
@@ -345,9 +345,6 @@ void
345345
ASTLoweringBase::visit (AST::ExternalStaticItem &)
346346
{}
347347
void
348-
ASTLoweringBase::visit (AST::ExternalFunctionItem &)
349-
{}
350-
void
351348
ASTLoweringBase::visit (AST::ExternBlock &)
352349
{}
353350

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

-1
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,6 @@ class ASTLoweringBase : public AST::ASTVisitor
186186
// virtual void visit(ExternalItem& item);
187187
virtual void visit (AST::ExternalTypeItem &item);
188188
virtual void visit (AST::ExternalStaticItem &item);
189-
virtual void visit (AST::ExternalFunctionItem &item);
190189
virtual void visit (AST::ExternBlock &block);
191190

192191
// rust-macro.h

gcc/rust/metadata/rust-export-metadata.cc

+2-39
Original file line numberDiff line numberDiff line change
@@ -93,46 +93,9 @@ ExportContext::emit_function (const HIR::Function &fn)
9393
// FIXME assert that this is actually an AST::Function
9494
AST::Function &function = static_cast<AST::Function &> (vis_item);
9595

96-
// we can emit an extern block with abi of "rust"
97-
Identifier item_name = function.get_function_name ();
98-
99-
// always empty for extern linkage
100-
AST::WhereClause where_clause = AST::WhereClause::create_empty ();
101-
std::vector<std::unique_ptr<AST::GenericParam>> generic_params;
102-
103-
AST::Visibility vis = function.get_visibility ();
104-
std::unique_ptr<AST::Type> return_type
105-
= std::unique_ptr<AST::Type> (nullptr);
106-
if (function.has_return_type ())
107-
{
108-
return_type = function.get_return_type ()->clone_type ();
109-
}
110-
111-
std::vector<AST::NamedFunctionParam> function_params;
112-
for (auto &p : function.get_function_params ())
113-
{
114-
if (p->is_variadic () || p->is_self ())
115-
rust_unreachable ();
116-
auto param = static_cast<AST::FunctionParam *> (p.get ());
117-
std::string name = param->get_pattern ()->as_string ();
118-
std::unique_ptr<AST::Type> param_type
119-
= param->get_type ()->clone_type ();
120-
121-
AST::NamedFunctionParam np (name, std::move (param_type), {},
122-
param->get_locus ());
123-
function_params.push_back (std::move (np));
124-
}
125-
126-
AST::ExternalItem *external_item
127-
= new AST::ExternalFunctionItem (item_name, {} /* generic_params */,
128-
std::move (return_type), where_clause,
129-
std::move (function_params), vis,
130-
function.get_outer_attrs (),
131-
function.get_locus ());
132-
13396
std::vector<std::unique_ptr<AST::ExternalItem>> external_items;
134-
external_items.push_back (
135-
std::unique_ptr<AST::ExternalItem> (external_item));
97+
external_items.push_back (std::unique_ptr<AST::ExternalItem> (
98+
static_cast<AST::ExternalItem *> (&function)));
13699

137100
AST::ExternBlock extern_block (get_string_from_abi (Rust::ABI::RUST),
138101
std::move (external_items),

0 commit comments

Comments
 (0)