Repository: rust
Issue: Compile panic in nested empty proc_macro
Labels: I-ICE,T-compiler,C-bug,glacier,A-proc-macros

<!--
Thank you for finding an Internal Compiler Error! 🧊  If possible, try to provide
a minimal verifiable example. You can read "Rust Bug Minimization Patterns" for
how to create smaller examples.

http://blog.pnkfx.org/blog/2019/11/18/rust-bug-minimization-patterns/

-->

I wrote two proc_macros in the same crate, one calling the other. 
When the inner macro, named `ignore` in the example below, is invoked by the outer macro in the 
example, `this_fails`, the build panics.


### Code

File `metamodel_macros/src/lib.rs` in a proc_macro crate named `metamodel_macros`:

```Rust
// these proc_macros cause the failure (the ignore macro called from the this_fails macro)
// this code is in root of a crate named metamodel_macros 

#[proc_macro]
pub fn ignore(input: TokenStream) -> TokenStream {
    let mut result : TokenStream = TokenStream::new();
    result.into()
}

#[proc_macro]
pub fn this_fails(input: TokenStream) -> TokenStream {
    let mut result : TokenStream = TokenStream::new();
    result.extend::<TokenStream>("metamodel_macros::ignore!(42).into()".parse().unwrap());
    result.into()
}
```

File `metamodel_tests/src/lib.rs` in a normal library crate named `metamodel_tests`:

```Rust
       // This test using the nested macros fails (
        #[test]
        pub fn bug_report() {
            metamodel_macros::this_fails!(1*2*3*7);
        }
```

### Meta
<!--
If you're using the stable version of the compiler, you should also check if the
bug also exists in the beta or nightly versions.
-->

`rustc --version --verbose`:
```
rustc 1.59.0
binary: rustc
commit-hash: unknown
commit-date: unknown
host: x86_64-unknown-linux-gnu
release: 1.59.0
LLVM version: 13.0.1
```

This is the vanilla Ubuntu `rust-all` and `rust-src` packages.

### Error output

```
thread 'rustc' panicked at 'called `Option::unwrap()` on a `None` value', compiler/rustc_resolve/src/late.rs:2406:52
stack backtrace:
   0:     0x7f05fe4c8db6 - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::hc764e6c306839a24
   1:     0x7f05fe540f1c - core::fmt::write::h6c6063682136d3f7
   2:     0x7f05fe4ad445 - <unknown>
   3:     0x7f05fe4bdf51 - <unknown>
   4:     0x7f05fe4bdb51 - <unknown>
   5:     0x7f05feca1b09 - <unknown>
   6:     0x7f05e8c99093 - <alloc::boxed::Box<F,A> as core::ops::function::Fn<Args>>::call::h15d19db900bf691c
                               at /build/rustc-60tkWq/rustc-1.59.0+dfsg1/library/alloc/src/boxed.rs:1868:9
   7:     0x7f05e8c986bd - proc_macro::bridge::client::<impl proc_macro::bridge::Bridge>::enter::{{closure}}::{{closure}}::hb14332fef47f4396
                               at /build/rustc-60tkWq/rustc-1.59.0+dfsg1/library/proc_macro/src/bridge/client.rs:320:21
   8:     0x7f05fe4be616 - std::panicking::rust_panic_with_hook::hb626f56f9705169d
   9:     0x7f05fe4c9762 - <unknown>
  10:     0x7f05fe4c8ee4 - <unknown>
  11:     0x7f05fe4be172 - rust_begin_unwind
  12:     0x7f05fe495fb1 - core::panicking::panic_fmt::h9ddcb63ac904a529
  13:     0x7f05fe495efd - core::panicking::panic::hd3f4ff0add4e700c
  14:     0x7f05ff7c98e4 - <unknown>
  15:     0x7f05ff7b2b79 - <rustc_resolve[c1d81ea7e97dfba6]::late::LateResolutionVisitor as rustc_ast[59dd777c9703ec89]::visit::Visitor>::visit_block
  16:     0x7f05ff7b450e - <rustc_resolve[c1d81ea7e97dfba6]::late::LateResolutionVisitor as rustc_ast[59dd777c9703ec89]::visit::Visitor>::visit_fn
  17:     0x7f05ff7945c1 - <unknown>
  18:     0x7f05ff7b8a89 - <unknown>
  19:     0x7f05ff79461b - <unknown>
  20:     0x7f05ff7b66e9 - <unknown>
  21:     0x7f05ff76bedc - <unknown>
  22:     0x7f05ff6dfd4b - <unknown>
  23:     0x7f05fed9bb53 - <unknown>
  24:     0x7f05feda071a - <rustc_interface[e82d985b74efe81f]::queries::Queries>::expansion
  25:     0x7f05fec475e1 - <unknown>
  26:     0x7f05fec13d13 - <unknown>
  27:     0x7f05fec44e19 - <unknown>
  28:     0x7f05fec1ee23 - <unknown>
  29:     0x7f05fec18919 - <unknown>
  30:     0x7f05fec914f0 - <unknown>
  31:     0x7f05fe4b4893 - <unknown>
  32:     0x7f05fe2a0b43 - start_thread
                               at ./nptl/./nptl/pthread_create.c:442:8
  33:     0x7f05fe332a00 - clone3
                               at ./misc/../sysdeps/unix/sysv/linux/x86_64/clone3.S:81
  34:                0x0 - <unknown>

error: internal compiler error: unexpected panic

note: the compiler unexpectedly panicked. this is a bug.

note: we would appreciate a bug report: https://github.com/rust-lang/rust/issues/new?labels=C-bug%2C+I-ICE%2C+T-compiler&template=ice.md

warning: `metaprogramming_lab` (lib) generated 6 warnings
note: rustc 1.59.0 running on x86_64-unknown-linux-gnu

note: compiler flags: -C embed-bitcode=no -C debuginfo=2 -C incremental

note: some of the compiler flags provided by cargo are hidden

query stack during panic:
end of query stack
For more information about this error, try `rustc --explain E0433`.
error: could not compile `metamodel_test` due to previous error
```

<!--
Include a backtrace in the code block by setting `RUST_BACKTRACE=1` in your
environment. E.g. `RUST_BACKTRACE=1 cargo build`.
-->
<details><summary><strong>Backtrace</strong></summary>
<p>

```
thread 'rustc' panicked at 'called `Option::unwrap()` on a `None` value', compiler/rustc_resolve/src/late.rs:2406:52
stack backtrace:
   0:     0x7f05fe4c8db6 - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::hc764e6c306839a24
   1:     0x7f05fe540f1c - core::fmt::write::h6c6063682136d3f7
   2:     0x7f05fe4ad445 - <unknown>
   3:     0x7f05fe4bdf51 - <unknown>
   4:     0x7f05fe4bdb51 - <unknown>
   5:     0x7f05feca1b09 - <unknown>
   6:     0x7f05e8c99093 - <alloc::boxed::Box<F,A> as core::ops::function::Fn<Args>>::call::h15d19db900bf691c
                               at /build/rustc-60tkWq/rustc-1.59.0+dfsg1/library/alloc/src/boxed.rs:1868:9
   7:     0x7f05e8c986bd - proc_macro::bridge::client::<impl proc_macro::bridge::Bridge>::enter::{{closure}}::{{closure}}::hb14332fef47f4396
                               at /build/rustc-60tkWq/rustc-1.59.0+dfsg1/library/proc_macro/src/bridge/client.rs:320:21
   8:     0x7f05fe4be616 - std::panicking::rust_panic_with_hook::hb626f56f9705169d
   9:     0x7f05fe4c9762 - <unknown>
  10:     0x7f05fe4c8ee4 - <unknown>
  11:     0x7f05fe4be172 - rust_begin_unwind
  12:     0x7f05fe495fb1 - core::panicking::panic_fmt::h9ddcb63ac904a529
  13:     0x7f05fe495efd - core::panicking::panic::hd3f4ff0add4e700c
  14:     0x7f05ff7c98e4 - <unknown>
  15:     0x7f05ff7b2b79 - <rustc_resolve[c1d81ea7e97dfba6]::late::LateResolutionVisitor as rustc_ast[59dd777c9703ec89]::visit::Visitor>::visit_block
  16:     0x7f05ff7b450e - <rustc_resolve[c1d81ea7e97dfba6]::late::LateResolutionVisitor as rustc_ast[59dd777c9703ec89]::visit::Visitor>::visit_fn
  17:     0x7f05ff7945c1 - <unknown>
  18:     0x7f05ff7b8a89 - <unknown>
  19:     0x7f05ff79461b - <unknown>
  20:     0x7f05ff7b66e9 - <unknown>
  21:     0x7f05ff76bedc - <unknown>
  22:     0x7f05ff6dfd4b - <unknown>
  23:     0x7f05fed9bb53 - <unknown>
  24:     0x7f05feda071a - <rustc_interface[e82d985b74efe81f]::queries::Queries>::expansion
  25:     0x7f05fec475e1 - <unknown>
  26:     0x7f05fec13d13 - <unknown>
  27:     0x7f05fec44e19 - <unknown>
  28:     0x7f05fec1ee23 - <unknown>
  29:     0x7f05fec18919 - <unknown>
  30:     0x7f05fec914f0 - <unknown>
  31:     0x7f05fe4b4893 - <unknown>
  32:     0x7f05fe2a0b43 - start_thread
                               at ./nptl/./nptl/pthread_create.c:442:8
  33:     0x7f05fe332a00 - clone3
                               at ./misc/../sysdeps/unix/sysv/linux/x86_64/clone3.S:81
  34:                0x0 - <unknown>

```

</p>
</details>