@@ -488,6 +488,18 @@ macro_rules! expand_if_cached {
488
488
} ;
489
489
}
490
490
491
+ /// Don't show the backtrace for query system by default
492
+ /// use `RUST_BACKTRACE=full` to show all the backtraces
493
+ #[ inline( never) ]
494
+ pub fn __rust_begin_short_backtrace < F , T > ( f : F ) -> T
495
+ where
496
+ F : FnOnce ( ) -> T ,
497
+ {
498
+ let result = f ( ) ;
499
+ std:: hint:: black_box ( ( ) ) ;
500
+ result
501
+ }
502
+
491
503
// NOTE: `$V` isn't used here, but we still need to match on it so it can be passed to other macros
492
504
// invoked by `rustc_query_append`.
493
505
macro_rules! define_queries {
@@ -498,21 +510,25 @@ macro_rules! define_queries {
498
510
use super :: * ;
499
511
500
512
$(
501
- #[ inline( always) ]
502
- #[ tracing:: instrument( level = "trace" , skip( tcx) ) ]
503
- pub ( super ) fn $name<' tcx>(
504
- tcx: TyCtxt <' tcx>,
505
- span: Span ,
506
- key: query_keys:: $name<' tcx>,
507
- mode: QueryMode ,
508
- ) -> Option <Erase <query_values:: $name<' tcx>>> {
509
- get_query_incr(
510
- queries:: $name:: config( tcx) ,
511
- QueryCtxt :: new( tcx) ,
512
- span,
513
- key,
514
- mode
515
- )
513
+ // Adding `__rust_end_short_backtrace` marker to backtraces so that we emit the frames
514
+ // when `RUST_BACKTRACE=1`, add a new mod with `$name` here is to allow duplicate naming
515
+ pub mod $name {
516
+ use super :: * ;
517
+ #[ inline( never) ]
518
+ pub fn __rust_end_short_backtrace<' tcx>(
519
+ tcx: TyCtxt <' tcx>,
520
+ span: Span ,
521
+ key: query_keys:: $name<' tcx>,
522
+ mode: QueryMode ,
523
+ ) -> Option <Erase <query_values:: $name<' tcx>>> {
524
+ get_query_incr(
525
+ queries:: $name:: config( tcx) ,
526
+ QueryCtxt :: new( tcx) ,
527
+ span,
528
+ key,
529
+ mode
530
+ )
531
+ }
516
532
}
517
533
) *
518
534
}
@@ -521,32 +537,34 @@ macro_rules! define_queries {
521
537
use super :: * ;
522
538
523
539
$(
524
- #[ inline( always) ]
525
- #[ tracing:: instrument( level = "trace" , skip( tcx) ) ]
526
- pub ( super ) fn $name<' tcx>(
527
- tcx: TyCtxt <' tcx>,
528
- span: Span ,
529
- key: query_keys:: $name<' tcx>,
530
- __mode: QueryMode ,
531
- ) -> Option <Erase <query_values:: $name<' tcx>>> {
532
- Some ( get_query_non_incr(
533
- queries:: $name:: config( tcx) ,
534
- QueryCtxt :: new( tcx) ,
535
- span,
536
- key,
537
- ) )
540
+ pub mod $name {
541
+ use super :: * ;
542
+ #[ inline( never) ]
543
+ pub fn __rust_end_short_backtrace<' tcx>(
544
+ tcx: TyCtxt <' tcx>,
545
+ span: Span ,
546
+ key: query_keys:: $name<' tcx>,
547
+ __mode: QueryMode ,
548
+ ) -> Option <Erase <query_values:: $name<' tcx>>> {
549
+ Some ( get_query_non_incr(
550
+ queries:: $name:: config( tcx) ,
551
+ QueryCtxt :: new( tcx) ,
552
+ span,
553
+ key,
554
+ ) )
555
+ }
538
556
}
539
557
) *
540
558
}
541
559
542
560
pub ( crate ) fn engine( incremental: bool ) -> QueryEngine {
543
561
if incremental {
544
562
QueryEngine {
545
- $( $name: get_query_incr:: $name, ) *
563
+ $( $name: get_query_incr:: $name:: __rust_end_short_backtrace , ) *
546
564
}
547
565
} else {
548
566
QueryEngine {
549
- $( $name: get_query_non_incr:: $name, ) *
567
+ $( $name: get_query_non_incr:: $name:: __rust_end_short_backtrace , ) *
550
568
}
551
569
}
552
570
}
@@ -578,10 +596,15 @@ macro_rules! define_queries {
578
596
query_cache: offset_of!( QueryCaches <' tcx> => $name) ,
579
597
cache_on_disk: |tcx, key| :: rustc_middle:: query:: cached:: $name( tcx, key) ,
580
598
execute_query: |tcx, key| erase( tcx. $name( key) ) ,
581
- compute: |tcx, key| query_provided_to_value:: $name(
582
- tcx,
583
- call_provider!( [ $( $modifiers) * ] [ tcx, $name, key] )
584
- ) ,
599
+ compute: |tcx, key| {
600
+ use crate :: plumbing:: __rust_begin_short_backtrace;
601
+ __rust_begin_short_backtrace( ||
602
+ query_provided_to_value:: $name(
603
+ tcx,
604
+ call_provider!( [ $( $modifiers) * ] [ tcx, $name, key] )
605
+ )
606
+ )
607
+ } ,
585
608
can_load_from_disk: should_ever_cache_on_disk!( [ $( $modifiers) * ] true false ) ,
586
609
try_load_from_disk: should_ever_cache_on_disk!( [ $( $modifiers) * ] {
587
610
|tcx, key, prev_index, index| {
0 commit comments