Skip to content

ICE on stable: Proc macro attribute usage with lazy_static #58165

Closed
@RustyYato

Description

@RustyYato

Code:
Main crate:

use lazy_static::lazy_static;

#[telem_start::start]
fn main() {
    
}

Proc Macro Crate (telem_start)

extern crate proc_macro;

use proc_macro::TokenStream;
use quote::quote;

use syn::Item;
use syn::spanned::Spanned;

#[proc_macro_attribute]
pub fn start(attr: TokenStream, item: TokenStream) -> TokenStream {
    let item: Item = syn::parse(item).unwrap();
    
    let mut start_fn = if let Item::Fn(item) = item {
        item
    } else {
        panic!()
    };

    let mut block = start_fn.block;

    let stmt: syn::Stmt = syn::parse((quote! {
        lazy_static! { static ref __telem_core__start_time: std::time::Instant = { std::time::Instant::now() }; }
    }).into()).unwrap();

    block.stmts = std::iter::once(stmt).chain(block.stmts).collect();
    start_fn.block = block;

    (quote! {
        #start_fn
    }).into()
}

Backtrace

error: internal compiler error: src\librustc\dep_graph\graph.rs:610: DepNode Hir(d73c6af366f2c00f-293f1afd29c872f8) should have been pre-allocated but wasn't.

thread 'rustc' panicked at 'Box<Any>', src\librustc_errors\lib.rs:588:9
stack backtrace:
   0: std::sys_common::alloc::realloc_fallback
   1: std::panicking::take_hook
   2: std::panicking::take_hook
   3: rustc::ty::trait_def::TraitDef::ancestors
   4: std::panicking::rust_panic_with_hook
   5: <rustc_errors::emitter::ColorConfig as core::fmt::Debug>::fmt
   6: rustc_errors::Handler::bug
   7: rustc::util::bug::bug_fmt
   8: rustc::ty::context::<impl rustc::infer::canonical::Canonical<'gcx, rustc::ty::context::UserTypeAnnotation<'gcx>>>::is_identity
   9: rustc::ty::context::<impl rustc::infer::canonical::Canonical<'gcx, rustc::ty::context::UserTypeAnnotation<'gcx>>>::is_identity
  10: rustc::ty::context::<impl rustc::infer::canonical::Canonical<'gcx, rustc::ty::context::UserTypeAnnotation<'gcx>>>::is_identity
  11: rustc::util::bug::bug_fmt
  12: rustc::util::bug::bug_fmt
  13: rustc::dep_graph::graph::DepGraph::try_mark_green
  14: rustc::ty::query::plumbing::<impl rustc::ty::context::TyCtxt<'a, 'gcx, 'tcx>>::try_mark_green_and_read
  15: <rustc_typeck::check::Diverges as core::fmt::Debug>::fmt
  16: <rustc_typeck::variance::terms::InferredIndex as core::fmt::Debug>::fmt
  17: rustc_typeck::check_crate
  18: <rustc_driver::profile::trace::Query as core::fmt::Debug>::fmt
  19: rustc_driver::target_features::add_configuration
  20: rustc_driver::driver::compile_input
  21: rustc_driver::run_compiler
  22: <rustc_driver::CompilationFailure as core::fmt::Debug>::fmt
  23: rustc_driver::run_compiler
  24: <rustc_driver::CompilationFailure as core::fmt::Debug>::fmt
  25: <rustc_driver::profile::trace::Query as core::fmt::Debug>::fmt
  26: _rust_maybe_catch_panic
  27: <humantime::date::Error as std::error::Error>::cause
  28: std::sys::windows::thread::Thread::new
  29: BaseThreadInitThunk
  30: RtlUserThreadStart
query stack during panic:
end of query stack
error: aborting due to previous error

Metadata

Metadata

Assignees

No one assigned

    Labels

    A-incr-compArea: Incremental compilationC-bugCategory: This is a bug.I-ICEIssue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions