gccrs: module lowering: Do not append null pointers as items

Some module items do not need to get lowered to HIR such as `macro_rules!` definitions. Hence, module lowering should act the same as crate lowering: Only emplace back the lowered item if it is a valid pointer

gcc/rust/ChangeLog:

	* hir/rust-ast-lower-item.cc (ASTLoweringItem::visit): Do not lower
	null items within modules.

gcc/testsuite/ChangeLog:

	* rust/compile/macro44.rs: New test.
This commit is contained in:
Arthur Cohen
2022-09-14 10:23:46 +02:00
parent 739d0509ed
commit 3736647947
2 changed files with 38 additions and 1 deletions

View File

@@ -59,7 +59,10 @@ ASTLoweringItem::visit (AST::Module &module)
for (auto &item : module.get_items ())
{
auto transitem = translate (item.get ());
items.push_back (std::unique_ptr<Item> (transitem));
// The item may be null if it doesn't need to live in the HIR - for
// example, macro rules definitions
if (transitem)
items.push_back (std::unique_ptr<Item> (transitem));
}
// should be lowered/copied from module.get_in/outer_attrs()

View File

@@ -0,0 +1,34 @@
mod foo {
mod bar {
mod baz {
macro_rules! baz {
() => {{}};
}
}
}
macro_rules! foo {
() => {{}};
}
fn foo_f() { // { dg-warning "function is never used" }
foo!();
}
fn bar_f() { // { dg-warning "function is never used" }
baz!();
}
}
mod foo2 {
#[macro_export]
macro_rules! bar1 {
() => {};
}
macro_rules! bar2 {
() => {};
}
}
fn main() {}