Rust-GCC / Rust-GCC/gccrs

ICE: in get_filename, at rust/expand/rust-macro-invoc-lexer.h:41

Open
#3,630 0 comments 0 reactions 2 assignees View on GitHub

@CohenArthur is already working on this.

Since Mar 31, 2025.

AST bug expansion
Dominant language
C++
Stars
2.9k
Forks
231
Avg merge
19h 55m
Merged PRs (30d)
67

Description

auto-reduced (treereduce-rust):

//@compile-flags: -frust-incomplete-and-experimental-compiler-do-not-use
mod foo {

    macro_rules! m {
        () => {
            mod std {
                pub struct io;
            }
        };
    }
    m!();
}

original:

#[allow(non_camel_case_types)]

mod foo {
    pub use std::io;
    //~^ ERROR `std` is ambiguous

    macro_rules! m {
        () => {
            mod std {
                pub struct io;
            }
        }
    }
    m!();
}

fn main() {
    use bar::foo::{alpha, charlie};
    match alpha {
      alpha | beta => {} //~  ERROR variable `beta` is not bound in all patterns
      'a'..='b' => {}
    }
}

Version information:

765121736dfe3f5b319bbe9837880deda326394e

Possibly related line of code:
https://github.com/Rust-GCC/gccrs/blob/765121736dfe3f5b319bbe9837880deda326394e/gcc/rust/expand/rust-macro-invoc-lexer.h#L35-L47

Command:
/home/matthias/vcs/github/gccrs/gccrs-build/gcc/crab1 -frust-incomplete-and-experimental-compiler-do-not-use

Program output

crab1: internal compiler error: in get_filename, at rust/expand/rust-macro-invoc-lexer.h:41
0xcecfb2 Rust::MacroInvocLexerBase<std::unique_ptr<Rust::AST::Token, std::default_delete<Rust::AST::Token> > >::get_filename[abi:cxx11]() const
	../../gcc/rust/expand/rust-macro-invoc-lexer.h:41
0xcecfb2 Rust::Parser<Rust::MacroInvocLexer>::parse_module(Rust::AST::Visibility, std::vector<Rust::AST::Attribute, std::allocator<Rust::AST::Attribute> >)
	../../gcc/rust/parse/rust-parse-impl.h:2479
0xceb669 Rust::Parser<Rust::MacroInvocLexer>::parse_vis_item(std::vector<Rust::AST::Attribute, std::allocator<Rust::AST::Attribute> >)
	../../gcc/rust/parse/rust-parse-impl.h:1313
0xcec190 Rust::Parser<Rust::MacroInvocLexer>::parse_item(bool)
	../../gcc/rust/parse/rust-parse-impl.h:1145
0xc7f3b5 operator()
	../../gcc/rust/expand/rust-macro-expand.cc:820
0xc7f3b5 __invoke_impl<Rust::AST::SingleASTNode, Rust::transcribe_many_items(Parser<MacroInvocLexer>&, TokenId&)::<lambda()>&>
	/usr/include/c++/14.2.1/bits/invoke.h:61
0xc7f3b5 __invoke_r<Rust::AST::SingleASTNode, Rust::transcribe_many_items(Parser<MacroInvocLexer>&, TokenId&)::<lambda()>&>
	/usr/include/c++/14.2.1/bits/invoke.h:116
0xc7f3b5 _M_invoke
	/usr/include/c++/14.2.1/bits/std_function.h:291
0xc7c216 std::function<Rust::AST::SingleASTNode ()>::operator()() const
	/usr/include/c++/14.2.1/bits/std_function.h:591
0xc7c216 parse_many
	../../gcc/rust/expand/rust-macro-expand.cc:794
0xc7e779 transcribe_many_stmts
	../../gcc/rust/expand/rust-macro-expand.cc:909
0xc7e779 transcribe_context
	../../gcc/rust/expand/rust-macro-expand.cc:1003
0xc7e779 Rust::MacroExpander::transcribe_rule(Rust::AST::MacroRulesDefinition&, Rust::AST::MacroRule&, Rust::AST::DelimTokenTree&, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, Rust::MatchedFragmentContainer*, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, Rust::MatchedFragmentContainer*> > >&, Rust::AST::InvocKind, Rust::MacroExpander::ContextType)
	../../gcc/rust/expand/rust-macro-expand.cc:1086
0xc82df5 Rust::MacroExpander::expand_decl_macro(unsigned int, Rust::AST::MacroInvocData&, Rust::AST::MacroRulesDefinition&, Rust::AST::InvocKind)
	../../gcc/rust/expand/rust-macro-expand.cc:123
0xc8338b Rust::MacroExpander::expand_invoc(Rust::AST::MacroInvocation&, Rust::AST::InvocKind)
	../../gcc/rust/expand/rust-macro-expand.cc:305
0xd3dc40 void Rust::ExpandVisitor::expand_macro_children<std::vector<std::unique_ptr<Rust::AST::Item, std::default_delete<Rust::AST::Item> >, std::allocator<std::unique_ptr<Rust::AST::Item, std::default_delete<Rust::AST::Item> > > >, std::unique_ptr<Rust::AST::Item, std::default_delete<Rust::AST::Item> > >(std::vector<std::unique_ptr<Rust::AST::Item, std::default_delete<Rust::AST::Item> >, std::allocator<std::unique_ptr<Rust::AST::Item, std::default_delete<Rust::AST::Item> > > >&, std::function<std::unique_ptr<Rust::AST::Item, std::default_delete<Rust::AST::Item> > (Rust::AST::SingleASTNode)>)
	../../gcc/rust/expand/rust-expand-visitor.h:133
0xd3dc40 Rust::ExpandVisitor::expand_inner_items(std::vector<std::unique_ptr<Rust::AST::Item, std::default_delete<Rust::AST::Item> >, std::allocator<std::unique_ptr<Rust::AST::Item, std::default_delete<Rust::AST::Item> > > >&)
	../../gcc/rust/expand/rust-expand-visitor.cc:239
0xd3dc40 void Rust::ExpandVisitor::expand_macro_children<std::vector<std::unique_ptr<Rust::AST::Item, std::default_delete<Rust::AST::Item> >, std::allocator<std::unique_ptr<Rust::AST::Item, std::default_delete<Rust::AST::Item> > > >, std::unique_ptr<Rust::AST::Item, std::default_delete<Rust::AST::Item> > >(std::vector<std::unique_ptr<Rust::AST::Item, std::default_delete<Rust::AST::Item> >, std::allocator<std::unique_ptr<Rust::AST::Item, std::default_delete<Rust::AST::Item> > > >&, std::function<std::unique_ptr<Rust::AST::Item, std::default_delete<Rust::AST::Item> > (Rust::AST::SingleASTNode)>)
	../../gcc/rust/expand/rust-expand-visitor.h:133
0xd3dc40 Rust::ExpandVisitor::expand_inner_items(std::vector<std::unique_ptr<Rust::AST::Item, std::default_delete<Rust::AST::Item> >, std::allocator<std::unique_ptr<Rust::AST::Item, std::default_delete<Rust::AST::Item> > > >&)
	../../gcc/rust/expand/rust-expand-visitor.cc:239
0xc46135 Rust::Session::expansion(Rust::AST::Crate&, Rust::Resolver2_0::NameResolutionContext&)
	../../gcc/rust/rust-session-manager.cc:959
Please submit a full bug report, with preprocessed source (by using -freport-bug).
Please include the complete backtrace with any bug report.
See <https://gcc.gnu.org/bugs/> for instructions.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.