diff options
4 files changed, 52 insertions, 9 deletions
diff --git a/gcc/rust/hir/rust-ast-lower-item.h b/gcc/rust/hir/rust-ast-lower-item.h index 3083554..bcf83ee 100644 --- a/gcc/rust/hir/rust-ast-lower-item.h +++ b/gcc/rust/hir/rust-ast-lower-item.h @@ -29,6 +29,7 @@ #include "rust-ast-lower-pattern.h" #include "rust-ast-lower-block.h" #include "rust-ast-lower-extern.h" +#include "rust-hir-full-decls.h" namespace Rust { namespace HIR { @@ -54,6 +55,43 @@ public: return resolver.translated; } + void visit (AST::Module &module) override + { + auto crate_num = mappings->get_current_crate (); + Analysis::NodeMapping mapping (crate_num, module.get_node_id (), + mappings->get_next_hir_id (crate_num), + mappings->get_next_localdef_id (crate_num)); + + // should be lowered from module.get_vis() + HIR::Visibility vis = HIR::Visibility::create_public (); + + auto items = std::vector<std::unique_ptr<Item> > (); + + for (auto &item : module.get_items ()) + { + auto transitem = translate (item.get ()); + items.push_back (std::unique_ptr<Item> (transitem)); + } + + // should be lowered/copied from module.get_in/outer_attrs() + AST::AttrVec inner_attrs; + AST::AttrVec outer_attrs; + + translated + = new HIR::ModuleBodied (mapping, module.get_name (), module.get_locus (), + std::move (items), std::move (vis), + std::move (inner_attrs), + std::move (outer_attrs)); + + mappings->insert_defid_mapping (mapping.get_defid (), translated); + mappings->insert_hir_item (mapping.get_crate_num (), mapping.get_hirid (), + translated); + mappings->insert_module (mapping.get_crate_num (), mapping.get_hirid (), + static_cast<Module *> (translated)); + mappings->insert_location (crate_num, mapping.get_hirid (), + module.get_locus ()); + } + void visit (AST::TypeAlias &alias) override { std::vector<std::unique_ptr<HIR::WhereClauseItem> > where_clause_items; diff --git a/gcc/rust/hir/tree/rust-hir-item.h b/gcc/rust/hir/tree/rust-hir-item.h index ba04339..32ee317 100644 --- a/gcc/rust/hir/tree/rust-hir-item.h +++ b/gcc/rust/hir/tree/rust-hir-item.h @@ -718,6 +718,8 @@ public: void accept_vis (HIRVisitor &vis) override; + std::vector<std::unique_ptr<Item> > &get_items () { return items; }; + /* Override that runs the function recursively on all items contained within * the module. */ void add_crate_name (std::vector<std::string> &names) const override; diff --git a/gcc/testsuite/rust/compile/torture/all_doc_comment_line_blocks.rs b/gcc/testsuite/rust/compile/torture/all_doc_comment_line_blocks.rs index ab38ac6..41c3b51 100644 --- a/gcc/testsuite/rust/compile/torture/all_doc_comment_line_blocks.rs +++ b/gcc/testsuite/rust/compile/torture/all_doc_comment_line_blocks.rs @@ -9,7 +9,7 @@ /// outer doc line for module /** outer doc block for module */ -pub mod module +pub mod module // { dg-warning "unused name" } { //! inner line doc //!! inner line doc! @@ -24,21 +24,23 @@ pub mod module /** outer block doc */ /*** block comment */ - mod block_doc_comments + mod block_doc_comments // { dg-warning "unused name" } { /* /* */ /** */ /*! */ */ /*! /* */ /** */ /*! */ */ /** /* */ /** */ /*! */ */ - mod item { } + mod item { } // { dg-warning "unused name" } } - pub mod empty + pub mod empty // { dg-warning "unused name" } { //! /*!*/ // /// + // the following warning is issued one line earlier + // { dg-warning "unused name" } mod doc { } /**/ /***/ diff --git a/gcc/testsuite/rust/compile/torture/all_doc_comment_line_blocks_crlf.rs b/gcc/testsuite/rust/compile/torture/all_doc_comment_line_blocks_crlf.rs index 3ea2cd0..e5ed911 100644 --- a/gcc/testsuite/rust/compile/torture/all_doc_comment_line_blocks_crlf.rs +++ b/gcc/testsuite/rust/compile/torture/all_doc_comment_line_blocks_crlf.rs @@ -9,7 +9,7 @@ /// outer doc line for module
/** outer doc block for module */
-pub mod module
+pub mod module // { dg-warning "unused name" }
{
//! inner line doc
//!! inner line doc!
@@ -24,22 +24,23 @@ pub mod module /** outer block doc */
/*** block comment */
- mod block_doc_comments
+ mod block_doc_comments // { dg-warning "unused name" }
{
/* /* */ /** */ /*! */ */
/*! /* */ /** */ /*! */ */
/** /* */ /** */ /*! */ */
- mod item { }
+ mod item { } // { dg-warning "unused name" }
}
- pub mod empty
+ pub mod empty // { dg-warning "unused name" }
{
//!
/*!*/
//
///
- mod doc { }
+ mod doc { } // { dg-warning "unused name" }
+
/**/
/***/
}
|