@@ -49,19 +49,27 @@ pub(crate) fn unforce_fallback() {
49
49
// not occur, they need to call e.g. `proc_macro2::Span::call_site()` from
50
50
// the main thread before launching any other threads.
51
51
fn 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 ;
53
60
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) ;
58
65
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 ) ;
61
68
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
+ }
66
74
}
67
75
}
0 commit comments