Closed
Description
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