diff --git a/src/etc/natvis/intrinsic.natvis b/src/etc/natvis/intrinsic.natvis new file mode 100644 index 000000000000..67be9769fb33 --- /dev/null +++ b/src/etc/natvis/intrinsic.natvis @@ -0,0 +1,24 @@ + + + + {data_ptr,[length]} + data_ptr,[length] + + length + + length + data_ptr + + + + + {{ length={length} }} + + length + + length + data_ptr + + + + diff --git a/src/librustc_trans/debuginfo/type_names.rs b/src/librustc_trans/debuginfo/type_names.rs index bfca4fec706e..9ab5bc4a5a94 100644 --- a/src/librustc_trans/debuginfo/type_names.rs +++ b/src/librustc_trans/debuginfo/type_names.rs @@ -61,21 +61,27 @@ pub fn push_debuginfo_type_name<'a, 'tcx>(cx: &CrateContext<'a, 'tcx>, output.push(')'); }, ty::TyRawPtr(ty::TypeAndMut { ty: inner_type, mutbl } ) => { - output.push('*'); + let is_like_msvc = cx.sess().target.target.options.is_like_msvc; + + if !is_like_msvc {output.push('*');} match mutbl { hir::MutImmutable => output.push_str("const "), hir::MutMutable => output.push_str("mut "), } push_debuginfo_type_name(cx, inner_type, true, output); + if is_like_msvc {output.push('*');} }, ty::TyRef(_, ty::TypeAndMut { ty: inner_type, mutbl }) => { - output.push('&'); + let is_like_msvc = cx.sess().target.target.options.is_like_msvc; + + if !is_like_msvc {output.push('&');} if mutbl == hir::MutMutable { output.push_str("mut "); } push_debuginfo_type_name(cx, inner_type, true, output); + if is_like_msvc {output.push('*');} }, ty::TyArray(inner_type, len) => { output.push('['); @@ -84,9 +90,10 @@ pub fn push_debuginfo_type_name<'a, 'tcx>(cx: &CrateContext<'a, 'tcx>, output.push(']'); }, ty::TySlice(inner_type) => { - output.push('['); + let is_like_msvc = cx.sess().target.target.options.is_like_msvc; + output.push_str(if is_like_msvc {"slice<"} else {"["}); push_debuginfo_type_name(cx, inner_type, true, output); - output.push(']'); + output.push(if is_like_msvc {'>'} else {']'}); }, ty::TyDynamic(ref trait_data, ..) => { if let Some(principal) = trait_data.principal() {