aboutsummaryrefslogtreecommitdiff
path: root/gcc/rust/expand/rust-cfg-strip.cc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/rust/expand/rust-cfg-strip.cc')
-rw-r--r--gcc/rust/expand/rust-cfg-strip.cc53
1 files changed, 14 insertions, 39 deletions
diff --git a/gcc/rust/expand/rust-cfg-strip.cc b/gcc/rust/expand/rust-cfg-strip.cc
index 58d8071..3c5e74e 100644
--- a/gcc/rust/expand/rust-cfg-strip.cc
+++ b/gcc/rust/expand/rust-cfg-strip.cc
@@ -22,6 +22,7 @@
#include "rust-path.h"
#include "rust-session-manager.h"
#include "rust-attribute-values.h"
+#include "rust-macro-expand.h"
namespace Rust {
@@ -30,7 +31,7 @@ namespace Rust {
* should be stripped. Note that attributes must be expanded before calling.
*/
bool
-fails_cfg (const AST::AttrVec &attrs)
+CfgStrip::fails_cfg (const AST::AttrVec &attrs) const
{
auto &session = Session::get_instance ();
@@ -39,6 +40,9 @@ fails_cfg (const AST::AttrVec &attrs)
if (attr.get_path () == Values::Attributes::CFG
&& !attr.check_cfg_predicate (session))
return true;
+ else if (!expansion_cfg.should_test
+ && attr.get_path () == Values::Attributes::TEST)
+ return true;
}
return false;
}
@@ -48,7 +52,7 @@ fails_cfg (const AST::AttrVec &attrs)
* should be stripped. Will expand attributes as well.
*/
bool
-fails_cfg_with_expand (AST::AttrVec &attrs)
+CfgStrip::fails_cfg_with_expand (AST::AttrVec &attrs) const
{
auto &session = Session::get_instance ();
@@ -85,6 +89,9 @@ fails_cfg_with_expand (AST::AttrVec &attrs)
attr.as_string ().c_str ());
}
}
+ else if (!expansion_cfg.should_test
+ && attr.get_path () == Values::Attributes::TEST)
+ return true;
}
return false;
}
@@ -2062,38 +2069,6 @@ CfgStrip::visit (AST::StaticItem &static_item)
}
void
-CfgStrip::visit (AST::TraitItemConst &item)
-{
- // initial test based on outer attrs
- expand_cfg_attrs (item.get_outer_attrs ());
- if (fails_cfg_with_expand (item.get_outer_attrs ()))
- {
- item.mark_for_strip ();
- return;
- }
-
- AST::DefaultASTVisitor::visit (item);
-
- // strip any sub-types
- auto &type = item.get_type ();
-
- if (type.is_marked_for_strip ())
- rust_error_at (type.get_locus (), "cannot strip type in this position");
-
- /* strip any internal sub-expressions - expression itself isn't
- * allowed to have external attributes in this position so can't be
- * stripped */
- if (item.has_expression ())
- {
- auto &expr = item.get_expr ();
- if (expr.is_marked_for_strip ())
- rust_error_at (expr.get_locus (),
- "cannot strip expression in this position - outer "
- "attributes not allowed");
- }
-}
-
-void
CfgStrip::visit (AST::TraitItemType &item)
{
// initial test based on outer attrs
@@ -2374,7 +2349,7 @@ CfgStrip::visit (AST::StructPattern &pattern)
maybe_strip_pointer_allow_strip (elems.get_struct_pattern_fields ());
// assuming you can strip the ".." part
- if (elems.has_etc ())
+ if (elems.has_rest ())
{
expand_cfg_attrs (elems.get_etc_outer_attrs ());
if (fails_cfg_with_expand (elems.get_etc_outer_attrs ()))
@@ -2383,7 +2358,7 @@ CfgStrip::visit (AST::StructPattern &pattern)
}
void
-CfgStrip::visit (AST::TupleStructItemsNoRange &tuple_items)
+CfgStrip::visit (AST::TupleStructItemsNoRest &tuple_items)
{
AST::DefaultASTVisitor::visit (tuple_items);
// can't strip individual patterns, only sub-patterns
@@ -2396,7 +2371,7 @@ CfgStrip::visit (AST::TupleStructItemsNoRange &tuple_items)
}
}
void
-CfgStrip::visit (AST::TupleStructItemsRange &tuple_items)
+CfgStrip::visit (AST::TupleStructItemsHasRest &tuple_items)
{
AST::DefaultASTVisitor::visit (tuple_items);
// can't strip individual patterns, only sub-patterns
@@ -2429,7 +2404,7 @@ CfgStrip::visit (AST::TupleStructPattern &pattern)
}
void
-CfgStrip::visit (AST::TuplePatternItemsMultiple &tuple_items)
+CfgStrip::visit (AST::TuplePatternItemsNoRest &tuple_items)
{
AST::DefaultASTVisitor::visit (tuple_items);
@@ -2444,7 +2419,7 @@ CfgStrip::visit (AST::TuplePatternItemsMultiple &tuple_items)
}
void
-CfgStrip::visit (AST::TuplePatternItemsRanged &tuple_items)
+CfgStrip::visit (AST::TuplePatternItemsHasRest &tuple_items)
{
AST::DefaultASTVisitor::visit (tuple_items);