|
| 1 | +use std::collections::hash_map::Entry; |
1 | 2 | use std::ops::Range;
|
2 | 3 |
|
3 | 4 | use rustc_data_structures::fx::FxHashMap;
|
@@ -447,6 +448,7 @@ impl<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>> FunctionCx<'a, 'tcx, Bx> {
|
447 | 448 | }
|
448 | 449 |
|
449 | 450 | let mut per_local = IndexVec::from_elem(vec![], &self.mir.local_decls);
|
| 451 | + let mut params_seen: FxHashMap<_, Bx::DIVariable> = Default::default(); |
450 | 452 | for var in &self.mir.var_debug_info {
|
451 | 453 | let dbg_scope_and_span = if full_debug_info {
|
452 | 454 | self.adjusted_span_and_dbg_scope(var.source_info)
|
@@ -491,7 +493,18 @@ impl<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>> FunctionCx<'a, 'tcx, Bx> {
|
491 | 493 | VariableKind::LocalVariable
|
492 | 494 | };
|
493 | 495 |
|
494 |
| - self.cx.create_dbg_var(var.name, var_ty, dbg_scope, var_kind, span) |
| 496 | + if let VariableKind::ArgumentVariable(arg_index) = var_kind { |
| 497 | + match params_seen.entry((dbg_scope, arg_index)) { |
| 498 | + Entry::Occupied(o) => o.get().clone(), |
| 499 | + Entry::Vacant(v) => v |
| 500 | + .insert( |
| 501 | + self.cx.create_dbg_var(var.name, var_ty, dbg_scope, var_kind, span), |
| 502 | + ) |
| 503 | + .clone(), |
| 504 | + } |
| 505 | + } else { |
| 506 | + self.cx.create_dbg_var(var.name, var_ty, dbg_scope, var_kind, span) |
| 507 | + } |
495 | 508 | });
|
496 | 509 |
|
497 | 510 | let fragment = if let Some(ref fragment) = var.composite {
|
|
0 commit comments