@@ -49,19 +49,27 @@ pub(crate) fn unforce_fallback() {
4949// not occur, they need to call e.g. `proc_macro2::Span::call_site()` from
5050// the main thread before launching any other threads.
5151fn initialize ( ) {
52- type PanicHook = dyn Fn ( & PanicInfo ) + Sync + Send + ' static ;
52+ #[ cfg( feature = "is_available" ) ]
53+ {
54+ WORKS . store ( proc_macro:: is_available ( ) as usize + 1 , Ordering :: SeqCst ) ;
55+ }
56+
57+ #[ cfg( not( feature = "is_available" ) ) ]
58+ {
59+ type PanicHook = dyn Fn ( & PanicInfo ) + Sync + Send + ' static ;
5360
54- let null_hook: Box < PanicHook > = Box :: new ( |_panic_info| { /* ignore */ } ) ;
55- let sanity_check = & * null_hook as * const PanicHook ;
56- let original_hook = panic:: take_hook ( ) ;
57- panic:: set_hook ( null_hook) ;
61+ let null_hook: Box < PanicHook > = Box :: new ( |_panic_info| { /* ignore */ } ) ;
62+ let sanity_check = & * null_hook as * const PanicHook ;
63+ let original_hook = panic:: take_hook ( ) ;
64+ panic:: set_hook ( null_hook) ;
5865
59- let works = panic:: catch_unwind ( proc_macro:: Span :: call_site) . is_ok ( ) ;
60- WORKS . store ( works as usize + 1 , Ordering :: SeqCst ) ;
66+ let works = panic:: catch_unwind ( proc_macro:: Span :: call_site) . is_ok ( ) ;
67+ WORKS . store ( works as usize + 1 , Ordering :: SeqCst ) ;
6168
62- let hopefully_null_hook = panic:: take_hook ( ) ;
63- panic:: set_hook ( original_hook) ;
64- if sanity_check != & * hopefully_null_hook {
65- panic ! ( "observed race condition in proc_macro2::inside_proc_macro" ) ;
69+ let hopefully_null_hook = panic:: take_hook ( ) ;
70+ panic:: set_hook ( original_hook) ;
71+ if sanity_check != & * hopefully_null_hook {
72+ panic ! ( "observed race condition in proc_macro2::inside_proc_macro" ) ;
73+ }
6674 }
6775}
0 commit comments