@@ -479,7 +479,8 @@ impl<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>> FunctionCx<'a, 'tcx, Bx> {
479
479
480
480
let mut per_local = IndexVec :: from_elem ( vec ! [ ] , & self . mir . local_decls ) ;
481
481
let mut constants = vec ! [ ] ;
482
- let mut params_seen: FxHashMap < _ , Bx :: DIVariable > = Default :: default ( ) ;
482
+ let mut params_seen: FxHashMap < _ , ( Bx :: DIVariable , Span , mir:: SourceScope ) > =
483
+ Default :: default ( ) ;
483
484
for var in & self . mir . var_debug_info {
484
485
let dbg_scope_and_span = if full_debug_info {
485
486
self . adjusted_span_and_dbg_scope ( var. source_info )
@@ -498,7 +499,7 @@ impl<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>> FunctionCx<'a, 'tcx, Bx> {
498
499
}
499
500
} ;
500
501
501
- let dbg_var = dbg_scope_and_span. map ( |( dbg_scope, _, span) | {
502
+ let dbg_var = dbg_scope_and_span. and_then ( |( dbg_scope, _, span) | {
502
503
let var_kind = if let Some ( arg_index) = var. argument_index
503
504
&& var. composite . is_none ( )
504
505
&& let mir:: VarDebugInfoContents :: Place ( place) = var. value
@@ -524,18 +525,28 @@ impl<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>> FunctionCx<'a, 'tcx, Bx> {
524
525
VariableKind :: LocalVariable
525
526
} ;
526
527
527
- if let VariableKind :: ArgumentVariable ( arg_index) = var_kind {
528
+ Some ( if let VariableKind :: ArgumentVariable ( arg_index) = var_kind {
528
529
match params_seen. entry ( ( dbg_scope, arg_index) ) {
529
- Entry :: Occupied ( o) => o. get ( ) . clone ( ) ,
530
+ Entry :: Occupied ( o) => {
531
+ let ( seen_var, seen_span, seen_source_scope) = o. get ( ) ;
532
+ if * seen_span == span && * seen_source_scope != var. source_info . scope {
533
+ return None ;
534
+ } else {
535
+ seen_var. clone ( )
536
+ }
537
+ }
530
538
Entry :: Vacant ( v) => v
531
- . insert (
539
+ . insert ( (
532
540
self . cx . create_dbg_var ( var. name , var_ty, dbg_scope, var_kind, span) ,
533
- )
541
+ span,
542
+ var. source_info . scope ,
543
+ ) )
544
+ . 0
534
545
. clone ( ) ,
535
546
}
536
547
} else {
537
548
self . cx . create_dbg_var ( var. name , var_ty, dbg_scope, var_kind, span)
538
- }
549
+ } )
539
550
} ) ;
540
551
541
552
let fragment = if let Some ( ref fragment) = var. composite {
0 commit comments