Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ICE: -Zunpretty=hir "AST generic args printed by HIR pretty-printer" #97006

Closed
matthiaskrgr opened this issue May 13, 2022 · 1 comment · Fixed by #124318
Closed

ICE: -Zunpretty=hir "AST generic args printed by HIR pretty-printer" #97006

matthiaskrgr opened this issue May 13, 2022 · 1 comment · Fixed by #124318
Labels
C-bug Category: This is a bug. glacier ICE tracked in rust-lang/glacier. I-ICE Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️ requires-nightly This issue requires a nightly compiler in some way. S-bug-has-test Status: This bug is tracked inside the repo by a `known-bug` test. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue.

Comments

@matthiaskrgr
Copy link
Member

./src/test/ui/issues/issue-43424.rs

Code

#![allow(unused)]

macro_rules! m {
    ($attr_path: path) => {
        #[$attr_path]
        fn f() {}
    }
}

m!(inline<u8>); //~ ERROR: unexpected generic arguments in path

fn main() {}

Meta

rustc --version --verbose:

rustc 1.62.0-nightly (6dd68402c 2022-05-11)
binary: rustc
commit-hash: 6dd68402c5d7da168f87d8551dd9aed1d8a21893
commit-date: 2022-05-11
host: x86_64-unknown-linux-gnu
release: 1.62.0-nightly
LLVM version: 14.0.1

Error output

rustc -Zunpretty=hir ./src/test/ui/issues/issue-43424.rs

error: unexpected generic arguments in path
  --> ./src/test/ui/issues/issue-43424.rs:10:10
   |
10 | m!(inline<u8>); //~ ERROR: unexpected generic arguments in path
   |          ^^^^

thread 'rustc' panicked at 'AST generic args printed by HIR pretty-printer', compiler/rustc_hir_pretty/src/lib.rs:136:9
Backtrace


thread 'rustc' panicked at 'AST generic args printed by HIR pretty-printer', compiler/rustc_hir_pretty/src/lib.rs:136:9
stack backtrace:
   0:     0x7ffa9029de5d - std::backtrace_rs::backtrace::libunwind::trace::h7a9c384780f2ae7b
                               at /rustc/6dd68402c5d7da168f87d8551dd9aed1d8a21893/library/std/src/../../backtrace/src/backtrace/libunwind.rs:93:5
   1:     0x7ffa9029de5d - std::backtrace_rs::backtrace::trace_unsynchronized::heb75d166ca8b8236
                               at /rustc/6dd68402c5d7da168f87d8551dd9aed1d8a21893/library/std/src/../../backtrace/src/backtrace/mod.rs:66:5
   2:     0x7ffa9029de5d - std::sys_common::backtrace::_print_fmt::h322cd7edf00cb3b5
                               at /rustc/6dd68402c5d7da168f87d8551dd9aed1d8a21893/library/std/src/sys_common/backtrace.rs:66:5
   3:     0x7ffa9029de5d - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::h2bdd168863171e89
                               at /rustc/6dd68402c5d7da168f87d8551dd9aed1d8a21893/library/std/src/sys_common/backtrace.rs:45:22
   4:     0x7ffa902f9adc - core::fmt::write::he97f80a3d639b1e1
                               at /rustc/6dd68402c5d7da168f87d8551dd9aed1d8a21893/library/core/src/fmt/mod.rs:1196:17
   5:     0x7ffa9028f5e1 - std::io::Write::write_fmt::hfad334cf5c2887e6
                               at /rustc/6dd68402c5d7da168f87d8551dd9aed1d8a21893/library/std/src/io/mod.rs:1654:15
   6:     0x7ffa902a0b75 - std::sys_common::backtrace::_print::hb3fd4d16502c8b4b
                               at /rustc/6dd68402c5d7da168f87d8551dd9aed1d8a21893/library/std/src/sys_common/backtrace.rs:48:5
   7:     0x7ffa902a0b75 - std::sys_common::backtrace::print::h20c8699087b98c21
                               at /rustc/6dd68402c5d7da168f87d8551dd9aed1d8a21893/library/std/src/sys_common/backtrace.rs:35:9
   8:     0x7ffa902a0b75 - std::panicking::default_hook::{{closure}}::hceced8f030c627d7
                               at /rustc/6dd68402c5d7da168f87d8551dd9aed1d8a21893/library/std/src/panicking.rs:295:22
   9:     0x7ffa902a07e9 - std::panicking::default_hook::hf622cc58f7fb1da8
                               at /rustc/6dd68402c5d7da168f87d8551dd9aed1d8a21893/library/std/src/panicking.rs:314:9
  10:     0x7ffa90ae84a1 - rustc_driver[8eec3efc1f3aef49]::DEFAULT_HOOK::{closure#0}::{closure#0}
  11:     0x7ffa902a1346 - std::panicking::rust_panic_with_hook::h6a32c5574ceba44d
                               at /rustc/6dd68402c5d7da168f87d8551dd9aed1d8a21893/library/std/src/panicking.rs:702:17
  12:     0x7ffa902a1109 - std::panicking::begin_panic_handler::{{closure}}::h33a7eb85cc49019a
                               at /rustc/6dd68402c5d7da168f87d8551dd9aed1d8a21893/library/std/src/panicking.rs:586:13
  13:     0x7ffa9029e314 - std::sys_common::backtrace::__rust_end_short_backtrace::hbc4249165d4ceafc
                               at /rustc/6dd68402c5d7da168f87d8551dd9aed1d8a21893/library/std/src/sys_common/backtrace.rs:138:18
  14:     0x7ffa902a0e79 - rust_begin_unwind
                               at /rustc/6dd68402c5d7da168f87d8551dd9aed1d8a21893/library/std/src/panicking.rs:584:5
  15:     0x7ffa90266133 - core::panicking::panic_fmt::hea2f72507c137b32
                               at /rustc/6dd68402c5d7da168f87d8551dd9aed1d8a21893/library/core/src/panicking.rs:142:14
  16:     0x7ffa917e5192 - <rustc_hir_pretty[64c9283308801d1b]::State as rustc_ast_pretty[bbe234e6f3ca4345]::pprust::state::PrintState>::print_path
  17:     0x7ffa926ef052 - <rustc_hir_pretty[64c9283308801d1b]::State as rustc_ast_pretty[bbe234e6f3ca4345]::pprust::state::PrintState>::print_either_attributes
  18:     0x7ffa9320dc06 - <rustc_hir_pretty[64c9283308801d1b]::State>::print_item
  19:     0x7ffa90aeccd4 - <rustc_driver[8eec3efc1f3aef49]::pretty::NoAnn as rustc_hir_pretty[64c9283308801d1b]::PpAnn>::nested
  20:     0x7ffa917e65bd - <rustc_hir_pretty[64c9283308801d1b]::State>::print_mod
  21:     0x7ffa917e5cfe - rustc_hir_pretty[64c9283308801d1b]::print_crate
  22:     0x7ffa90aeef83 - rustc_driver[8eec3efc1f3aef49]::pretty::print_after_hir_lowering::{closure#1}
  23:     0x7ffa90aeec15 - rustc_driver[8eec3efc1f3aef49]::pretty::print_after_hir_lowering
  24:     0x7ffa90acdca0 - <rustc_interface[d03aac2056e219e8]::passes::QueryContext>::enter::<rustc_driver[8eec3efc1f3aef49]::run_compiler::{closure#1}::{closure#2}::{closure#1}, core[c5a39be06b715266]::result::Result<(), rustc_errors[ddf493a40e6cbb28]::ErrorGuaranteed>>
  25:     0x7ffa92b58dc0 - <rustc_interface[d03aac2056e219e8]::interface::Compiler>::enter::<rustc_driver[8eec3efc1f3aef49]::run_compiler::{closure#1}::{closure#2}, core[c5a39be06b715266]::result::Result<core[c5a39be06b715266]::option::Option<rustc_interface[d03aac2056e219e8]::queries::Linker>, rustc_errors[ddf493a40e6cbb28]::ErrorGuaranteed>>
  26:     0x7ffa92b80e1f - rustc_span[5dae44024ba07c23]::with_source_map::<core[c5a39be06b715266]::result::Result<(), rustc_errors[ddf493a40e6cbb28]::ErrorGuaranteed>, rustc_interface[d03aac2056e219e8]::interface::create_compiler_and_run<core[c5a39be06b715266]::result::Result<(), rustc_errors[ddf493a40e6cbb28]::ErrorGuaranteed>, rustc_driver[8eec3efc1f3aef49]::run_compiler::{closure#1}>::{closure#1}>
  27:     0x7ffa92b6c9a4 - rustc_interface[d03aac2056e219e8]::interface::create_compiler_and_run::<core[c5a39be06b715266]::result::Result<(), rustc_errors[ddf493a40e6cbb28]::ErrorGuaranteed>, rustc_driver[8eec3efc1f3aef49]::run_compiler::{closure#1}>
  28:     0x7ffa92b56f82 - <scoped_tls[9a81942410e5ea2f]::ScopedKey<rustc_span[5dae44024ba07c23]::SessionGlobals>>::set::<rustc_interface[d03aac2056e219e8]::interface::run_compiler<core[c5a39be06b715266]::result::Result<(), rustc_errors[ddf493a40e6cbb28]::ErrorGuaranteed>, rustc_driver[8eec3efc1f3aef49]::run_compiler::{closure#1}>::{closure#0}, core[c5a39be06b715266]::result::Result<(), rustc_errors[ddf493a40e6cbb28]::ErrorGuaranteed>>
  29:     0x7ffa92b6e09f - std[87b888c30fb8b53d]::sys_common::backtrace::__rust_begin_short_backtrace::<rustc_interface[d03aac2056e219e8]::util::run_in_thread_pool_with_globals<rustc_interface[d03aac2056e219e8]::interface::run_compiler<core[c5a39be06b715266]::result::Result<(), rustc_errors[ddf493a40e6cbb28]::ErrorGuaranteed>, rustc_driver[8eec3efc1f3aef49]::run_compiler::{closure#1}>::{closure#0}, core[c5a39be06b715266]::result::Result<(), rustc_errors[ddf493a40e6cbb28]::ErrorGuaranteed>>::{closure#0}, core[c5a39be06b715266]::result::Result<(), rustc_errors[ddf493a40e6cbb28]::ErrorGuaranteed>>
  30:     0x7ffa92b6e1d9 - <<std[87b888c30fb8b53d]::thread::Builder>::spawn_unchecked_<rustc_interface[d03aac2056e219e8]::util::run_in_thread_pool_with_globals<rustc_interface[d03aac2056e219e8]::interface::run_compiler<core[c5a39be06b715266]::result::Result<(), rustc_errors[ddf493a40e6cbb28]::ErrorGuaranteed>, rustc_driver[8eec3efc1f3aef49]::run_compiler::{closure#1}>::{closure#0}, core[c5a39be06b715266]::result::Result<(), rustc_errors[ddf493a40e6cbb28]::ErrorGuaranteed>>::{closure#0}, core[c5a39be06b715266]::result::Result<(), rustc_errors[ddf493a40e6cbb28]::ErrorGuaranteed>>::{closure#1} as core[c5a39be06b715266]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
  31:     0x7ffa902ab253 - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::h23107667314c5666
                               at /rustc/6dd68402c5d7da168f87d8551dd9aed1d8a21893/library/alloc/src/boxed.rs:1872:9
  32:     0x7ffa902ab253 - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::h8a72a46bb071903a
                               at /rustc/6dd68402c5d7da168f87d8551dd9aed1d8a21893/library/alloc/src/boxed.rs:1872:9
  33:     0x7ffa902ab253 - std::sys::unix::thread::Thread::new::thread_start::h81657d69ed68fad8
                               at /rustc/6dd68402c5d7da168f87d8551dd9aed1d8a21893/library/std/src/sys/unix/thread.rs:108:17
  34:     0x7ffa900835c2 - start_thread
  35:     0x7ffa90108584 - __clone
  36:                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

note: rustc 1.62.0-nightly (6dd68402c 2022-05-11) running on x86_64-unknown-linux-gnu

note: compiler flags: -Z unpretty=hir

query stack during panic:
end of query stack
error: aborting due to previous error

@matthiaskrgr matthiaskrgr added I-ICE Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️ T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. C-bug Category: This is a bug. requires-nightly This issue requires a nightly compiler in some way. labels May 13, 2022
matthiaskrgr added a commit to matthiaskrgr/glacier that referenced this issue Jun 11, 2022
@rust-lang-glacier-bot rust-lang-glacier-bot added the glacier ICE tracked in rust-lang/glacier. label Jun 11, 2022
@3tilley
Copy link
Contributor

3tilley commented Oct 11, 2023

I've had a look at this with amateur eyes, and it appears to be to do with how badly formed macros are treated by the HIR pretty printer. This can be seen by expanding the macro and feeding it through the same command.

Macro

#![allow(unused)]

macro_rules! m {
    ($attr_path: path) => {
        #[$attr_path]
        fn f() {}
    }
}

m!(inline<u8>); //~ ERROR: unexpected generic arguments in path

fn main() {}

Note that also -Z unpretty=hir-tree does not panic on the code above, so it doesn't appear to be a problem that the HIR represents an illegal macro.

Expanded

The result here is more predictable:

#![feature(prelude_import)]
#![allow(unused)]
#[prelude_import]
use std::prelude::rust_2021::*;
#[macro_use]
extern crate std;

macro_rules! m { ($attr_path : path) => { #[$attr_path] fn f() {} } ; }
#[

inline<u8>]
fn f() {}
//~ ERROR: unexpected generic arguments in path

fn main() {}

error: expected one of `(`, `::`, `=`, `[`, `]`, or `{`, found `<`
  --> src\main.rs:11:7
   |
11 | inline<u8>]
   |       ^ expected one of `(`, `::`, `=`, `[`, `]`, or `{`

error: could not compile `expanded` (bin "expanded") due to previous error

Solution

Should the pretty printer learn how to print generic args, even if it's illegal? The code is called here. I don't really understand the purpose of the panic and why generic args are unexpected which makes me nervous to alter the code.

Are there any other valid / invalid macros that anyone can think of to trigger other cases?

@matthiaskrgr matthiaskrgr added the S-bug-has-test Status: This bug is tracked inside the repo by a `known-bug` test. label Apr 19, 2024
@bors bors closed this as completed in 69122f1 May 11, 2024
rust-timer added a commit to rust-lang-ci/rust that referenced this issue May 11, 2024
Rollup merge of rust-lang#124318 - bvanjoi:fix-123911, r=petrochenkov

ignore generics args in attribute paths

Fixes rust-lang#97006
Fixes rust-lang#123911
Fixes rust-lang#123912

This patch ensures that we no longer have to handle invalid generic arguments in attribute paths.

r? `@petrochenkov`
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
C-bug Category: This is a bug. glacier ICE tracked in rust-lang/glacier. I-ICE Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️ requires-nightly This issue requires a nightly compiler in some way. S-bug-has-test Status: This bug is tracked inside the repo by a `known-bug` test. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue.
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants