From 5db1093b61d5814779198688240e26ce7f872b83 Mon Sep 17 00:00:00 2001 From: Ralf Jung Date: Tue, 21 May 2019 13:10:28 +0200 Subject: [PATCH 1/5] adjust deprecation date of mem::uninitialized --- src/libcore/mem.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libcore/mem.rs b/src/libcore/mem.rs index 24bee6355a7cc..56869f38a4f6b 100644 --- a/src/libcore/mem.rs +++ b/src/libcore/mem.rs @@ -466,7 +466,7 @@ pub unsafe fn zeroed() -> T { /// [`MaybeUninit`]: union.MaybeUninit.html /// [inv]: union.MaybeUninit.html#initialization-invariant #[inline] -#[rustc_deprecated(since = "1.40.0", reason = "use `mem::MaybeUninit` instead")] +#[rustc_deprecated(since = "1.38.0", reason = "use `mem::MaybeUninit` instead")] #[stable(feature = "rust1", since = "1.0.0")] pub unsafe fn uninitialized() -> T { intrinsics::panic_if_uninhabited::(); From 10ec30e6f22960dfac247be0fd51efb71343cb87 Mon Sep 17 00:00:00 2001 From: Mark Mansi Date: Wed, 22 May 2019 10:29:36 -0500 Subject: [PATCH 2/5] these errors can happen after all --- src/libsyntax/ext/tt/transcribe.rs | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/libsyntax/ext/tt/transcribe.rs b/src/libsyntax/ext/tt/transcribe.rs index e3586c1854c17..e6b49e61937d6 100644 --- a/src/libsyntax/ext/tt/transcribe.rs +++ b/src/libsyntax/ext/tt/transcribe.rs @@ -170,9 +170,11 @@ pub fn transcribe( } LockstepIterSize::Contradiction(ref msg) => { - // This should never happen because the macro parser should generate - // properly-sized matches for all meta-vars. - cx.span_bug(seq.span(), &msg[..]); + // FIXME: this really ought to be caught at macro definition time... It + // happens when two meta-variables are used in the same repetition in a + // sequence, but they come from different sequence matchers and repeat + // different amounts. + cx.span_fatal(seq.span(), &msg[..]); } LockstepIterSize::Constraint(len, _) => { @@ -187,9 +189,10 @@ pub fn transcribe( // Is the repetition empty? if len == 0 { if seq.op == quoted::KleeneOp::OneOrMore { - // This should be impossible because the macro parser would not - // match the given macro arm. - cx.span_bug(sp.entire(), "this must repeat at least once"); + // FIXME: this really ought to be caught at macro definition + // time... It happens when the Kleene operator in the matcher and + // the body for the same meta-variable do not match. + cx.span_fatal(sp.entire(), "this must repeat at least once"); } } else { // 0 is the initial counter (we have done 0 repretitions so far). `len` @@ -327,8 +330,7 @@ impl LockstepIterSize { LockstepIterSize::Constraint(r_len, _) if l_len == r_len => self, LockstepIterSize::Constraint(r_len, r_id) => { let msg = format!( - "inconsistent lockstep iteration: \ - '{}' has {} items, but '{}' has {}", + "meta-variable `{}` repeats {} times, but `{}` repeats {} times", l_id, l_len, r_id, r_len ); LockstepIterSize::Contradiction(msg) From a08a6a9a0dee40e01a730802d9d1d04f6de4a985 Mon Sep 17 00:00:00 2001 From: Mark Mansi Date: Wed, 22 May 2019 12:20:43 -0500 Subject: [PATCH 3/5] add ui tests --- src/test/ui/macros/issue-61033-1.rs | 9 +++++++++ src/test/ui/macros/issue-61033-1.stderr | 8 ++++++++ src/test/ui/macros/issue-61033-2.rs | 19 +++++++++++++++++++ src/test/ui/macros/issue-61033-2.stderr | 11 +++++++++++ 4 files changed, 47 insertions(+) create mode 100644 src/test/ui/macros/issue-61033-1.rs create mode 100644 src/test/ui/macros/issue-61033-1.stderr create mode 100644 src/test/ui/macros/issue-61033-2.rs create mode 100644 src/test/ui/macros/issue-61033-2.stderr diff --git a/src/test/ui/macros/issue-61033-1.rs b/src/test/ui/macros/issue-61033-1.rs new file mode 100644 index 0000000000000..8f85dec017f2a --- /dev/null +++ b/src/test/ui/macros/issue-61033-1.rs @@ -0,0 +1,9 @@ +// Regression test for issue #61033. + +macro_rules! test1 { + ($x:ident, $($tt:tt)*) => { $($tt)+ } //~ERROR this must repeat at least once +} + +fn main() { + test1!(x,); +} diff --git a/src/test/ui/macros/issue-61033-1.stderr b/src/test/ui/macros/issue-61033-1.stderr new file mode 100644 index 0000000000000..f3c68f4928dbb --- /dev/null +++ b/src/test/ui/macros/issue-61033-1.stderr @@ -0,0 +1,8 @@ +error: this must repeat at least once + --> $DIR/issue-61033-1.rs:4:34 + | +LL | ($x:ident, $($tt:tt)*) => { $($tt)+ } + | ^^^^^ + +error: aborting due to previous error + diff --git a/src/test/ui/macros/issue-61033-2.rs b/src/test/ui/macros/issue-61033-2.rs new file mode 100644 index 0000000000000..0799be10b96c7 --- /dev/null +++ b/src/test/ui/macros/issue-61033-2.rs @@ -0,0 +1,19 @@ +// Regression test for issue #61033. + +macro_rules! test2 { + ( + $(* $id1:ident)* + $(+ $id2:ident)* + ) => { + $( //~ERROR meta-variable `id1` repeats 2 times + $id1 + $id2 // $id1 and $id2 may repeat different numbers of times + )* + } +} + +fn main() { + test2! { + * a * b + + a + b + c + } +} diff --git a/src/test/ui/macros/issue-61033-2.stderr b/src/test/ui/macros/issue-61033-2.stderr new file mode 100644 index 0000000000000..bf502919cf794 --- /dev/null +++ b/src/test/ui/macros/issue-61033-2.stderr @@ -0,0 +1,11 @@ +error: meta-variable `id1` repeats 2 times, but `id2` repeats 3 times + --> $DIR/issue-61033-2.rs:8:10 + | +LL | $( + | __________^ +LL | | $id1 + $id2 // $id1 and $id2 may repeat different numbers of times +LL | | )* + | |_________^ + +error: aborting due to previous error + From 2f0c9ecbd8098f296845acfc6c8ef5b16150f2d6 Mon Sep 17 00:00:00 2001 From: Steven Fackler Date: Wed, 22 May 2019 14:09:34 -0700 Subject: [PATCH 4/5] Revert "Add implementations of last in terms of next_back on a bunch of DoubleEndedIterators." This reverts commit 3e86cf36b5114f201868bf459934fe346a76a2d4. --- src/liballoc/collections/binary_heap.rs | 15 ---------- src/liballoc/collections/btree/map.rs | 40 ------------------------- src/liballoc/collections/btree/set.rs | 15 ---------- src/liballoc/string.rs | 4 --- src/liballoc/vec.rs | 14 --------- src/libcore/ascii.rs | 2 -- src/libcore/iter/adapters/mod.rs | 5 ---- src/libcore/slice/mod.rs | 20 ------------- src/libcore/str/mod.rs | 20 ------------- src/libstd/env.rs | 6 ---- src/libstd/path.rs | 10 ------- src/libstd/sys/unix/args.rs | 2 -- src/libstd/sys/wasm/args.rs | 4 --- src/libstd/sys/windows/args.rs | 2 -- 14 files changed, 159 deletions(-) diff --git a/src/liballoc/collections/binary_heap.rs b/src/liballoc/collections/binary_heap.rs index c5a0b6e877b65..c898f064fd09f 100644 --- a/src/liballoc/collections/binary_heap.rs +++ b/src/liballoc/collections/binary_heap.rs @@ -1035,11 +1035,6 @@ impl<'a, T> Iterator for Iter<'a, T> { fn size_hint(&self) -> (usize, Option) { self.iter.size_hint() } - - #[inline] - fn last(mut self) -> Option<&'a T> { - self.next_back() - } } #[stable(feature = "rust1", since = "1.0.0")] @@ -1095,11 +1090,6 @@ impl Iterator for IntoIter { fn size_hint(&self) -> (usize, Option) { self.iter.size_hint() } - - #[inline] - fn last(mut self) -> Option { - self.next_back() - } } #[stable(feature = "rust1", since = "1.0.0")] @@ -1146,11 +1136,6 @@ impl Iterator for Drain<'_, T> { fn size_hint(&self) -> (usize, Option) { self.iter.size_hint() } - - #[inline] - fn last(mut self) -> Option { - self.next_back() - } } #[stable(feature = "drain", since = "1.6.0")] diff --git a/src/liballoc/collections/btree/map.rs b/src/liballoc/collections/btree/map.rs index 414abb00ef1fa..6b079fc87cc78 100644 --- a/src/liballoc/collections/btree/map.rs +++ b/src/liballoc/collections/btree/map.rs @@ -1193,11 +1193,6 @@ impl<'a, K: 'a, V: 'a> Iterator for Iter<'a, K, V> { fn size_hint(&self) -> (usize, Option) { (self.length, Some(self.length)) } - - #[inline] - fn last(mut self) -> Option<(&'a K, &'a V)> { - self.next_back() - } } #[stable(feature = "fused", since = "1.26.0")] @@ -1258,11 +1253,6 @@ impl<'a, K: 'a, V: 'a> Iterator for IterMut<'a, K, V> { fn size_hint(&self) -> (usize, Option) { (self.length, Some(self.length)) } - - #[inline] - fn last(mut self) -> Option<(&'a K, &'a mut V)> { - self.next_back() - } } #[stable(feature = "rust1", since = "1.0.0")] @@ -1369,11 +1359,6 @@ impl Iterator for IntoIter { fn size_hint(&self) -> (usize, Option) { (self.length, Some(self.length)) } - - #[inline] - fn last(mut self) -> Option<(K, V)> { - self.next_back() - } } #[stable(feature = "rust1", since = "1.0.0")] @@ -1436,11 +1421,6 @@ impl<'a, K, V> Iterator for Keys<'a, K, V> { fn size_hint(&self) -> (usize, Option) { self.inner.size_hint() } - - #[inline] - fn last(mut self) -> Option<&'a K> { - self.next_back() - } } #[stable(feature = "rust1", since = "1.0.0")] @@ -1478,11 +1458,6 @@ impl<'a, K, V> Iterator for Values<'a, K, V> { fn size_hint(&self) -> (usize, Option) { self.inner.size_hint() } - - #[inline] - fn last(mut self) -> Option<&'a V> { - self.next_back() - } } #[stable(feature = "rust1", since = "1.0.0")] @@ -1520,11 +1495,6 @@ impl<'a, K, V> Iterator for Range<'a, K, V> { unsafe { Some(self.next_unchecked()) } } } - - #[inline] - fn last(mut self) -> Option<(&'a K, &'a V)> { - self.next_back() - } } #[stable(feature = "map_values_mut", since = "1.10.0")] @@ -1538,11 +1508,6 @@ impl<'a, K, V> Iterator for ValuesMut<'a, K, V> { fn size_hint(&self) -> (usize, Option) { self.inner.size_hint() } - - #[inline] - fn last(mut self) -> Option<&'a mut V> { - self.next_back() - } } #[stable(feature = "map_values_mut", since = "1.10.0")] @@ -1661,11 +1626,6 @@ impl<'a, K, V> Iterator for RangeMut<'a, K, V> { unsafe { Some(self.next_unchecked()) } } } - - #[inline] - fn last(mut self) -> Option<(&'a K, &'a mut V)> { - self.next_back() - } } impl<'a, K, V> RangeMut<'a, K, V> { diff --git a/src/liballoc/collections/btree/set.rs b/src/liballoc/collections/btree/set.rs index 6f2467dfd6b51..16a96ca19b824 100644 --- a/src/liballoc/collections/btree/set.rs +++ b/src/liballoc/collections/btree/set.rs @@ -1019,11 +1019,6 @@ impl<'a, T> Iterator for Iter<'a, T> { fn size_hint(&self) -> (usize, Option) { self.iter.size_hint() } - - #[inline] - fn last(mut self) -> Option<&'a T> { - self.next_back() - } } #[stable(feature = "rust1", since = "1.0.0")] impl<'a, T> DoubleEndedIterator for Iter<'a, T> { @@ -1049,11 +1044,6 @@ impl Iterator for IntoIter { fn size_hint(&self) -> (usize, Option) { self.iter.size_hint() } - - #[inline] - fn last(mut self) -> Option { - self.next_back() - } } #[stable(feature = "rust1", since = "1.0.0")] impl DoubleEndedIterator for IntoIter { @@ -1083,11 +1073,6 @@ impl<'a, T> Iterator for Range<'a, T> { fn next(&mut self) -> Option<&'a T> { self.iter.next().map(|(k, _)| k) } - - #[inline] - fn last(mut self) -> Option<&'a T> { - self.next_back() - } } #[stable(feature = "btree_range", since = "1.17.0")] diff --git a/src/liballoc/string.rs b/src/liballoc/string.rs index e74d37c1c2bae..7f7722548f581 100644 --- a/src/liballoc/string.rs +++ b/src/liballoc/string.rs @@ -2385,10 +2385,6 @@ impl Iterator for Drain<'_> { fn size_hint(&self) -> (usize, Option) { self.iter.size_hint() } - #[inline] - fn last(mut self) -> Option { - self.next_back() - } } #[stable(feature = "drain", since = "1.6.0")] diff --git a/src/liballoc/vec.rs b/src/liballoc/vec.rs index c0cdffe596bab..073d3ab593703 100644 --- a/src/liballoc/vec.rs +++ b/src/liballoc/vec.rs @@ -2395,11 +2395,6 @@ impl Iterator for IntoIter { fn count(self) -> usize { self.len() } - - #[inline] - fn last(mut self) -> Option { - self.next_back() - } } #[stable(feature = "rust1", since = "1.0.0")] @@ -2519,11 +2514,6 @@ impl Iterator for Drain<'_, T> { fn size_hint(&self) -> (usize, Option) { self.iter.size_hint() } - - #[inline] - fn last(mut self) -> Option { - self.next_back() - } } #[stable(feature = "drain", since = "1.6.0")] @@ -2593,10 +2583,6 @@ impl Iterator for Splice<'_, I> { fn size_hint(&self) -> (usize, Option) { self.drain.size_hint() } - - fn last(mut self) -> Option { - self.next_back() - } } #[stable(feature = "vec_splice", since = "1.21.0")] diff --git a/src/libcore/ascii.rs b/src/libcore/ascii.rs index ddee02ea232d1..c0ab364380fbd 100644 --- a/src/libcore/ascii.rs +++ b/src/libcore/ascii.rs @@ -117,8 +117,6 @@ impl Iterator for EscapeDefault { type Item = u8; fn next(&mut self) -> Option { self.range.next().map(|i| self.data[i]) } fn size_hint(&self) -> (usize, Option) { self.range.size_hint() } - #[inline] - fn last(mut self) -> Option { self.next_back() } } #[stable(feature = "rust1", since = "1.0.0")] impl DoubleEndedIterator for EscapeDefault { diff --git a/src/libcore/iter/adapters/mod.rs b/src/libcore/iter/adapters/mod.rs index 64e588f65b468..518442efe7417 100644 --- a/src/libcore/iter/adapters/mod.rs +++ b/src/libcore/iter/adapters/mod.rs @@ -73,11 +73,6 @@ impl Iterator for Rev where I: DoubleEndedIterator { { self.iter.position(predicate) } - - #[inline] - fn last(mut self) -> Option { - self.next_back() - } } #[stable(feature = "rust1", since = "1.0.0")] diff --git a/src/libcore/slice/mod.rs b/src/libcore/slice/mod.rs index d06d107d32a41..50d2ba0d3ef7f 100644 --- a/src/libcore/slice/mod.rs +++ b/src/libcore/slice/mod.rs @@ -3547,11 +3547,6 @@ impl<'a, T, P> Iterator for Split<'a, T, P> where P: FnMut(&T) -> bool { (1, Some(self.v.len() + 1)) } } - - #[inline] - fn last(mut self) -> Option { - self.next_back() - } } #[stable(feature = "rust1", since = "1.0.0")] @@ -3650,11 +3645,6 @@ impl<'a, T, P> Iterator for SplitMut<'a, T, P> where P: FnMut(&T) -> bool { (1, Some(self.v.len() + 1)) } } - - #[inline] - fn last(mut self) -> Option { - self.next_back() - } } #[stable(feature = "rust1", since = "1.0.0")] @@ -3720,11 +3710,6 @@ impl<'a, T, P> Iterator for RSplit<'a, T, P> where P: FnMut(&T) -> bool { fn size_hint(&self) -> (usize, Option) { self.inner.size_hint() } - - #[inline] - fn last(mut self) -> Option { - self.next_back() - } } #[stable(feature = "slice_rsplit", since = "1.27.0")] @@ -3789,11 +3774,6 @@ impl<'a, T, P> Iterator for RSplitMut<'a, T, P> where P: FnMut(&T) -> bool { fn size_hint(&self) -> (usize, Option) { self.inner.size_hint() } - - #[inline] - fn last(mut self) -> Option { - self.next_back() - } } #[stable(feature = "slice_rsplit", since = "1.27.0")] diff --git a/src/libcore/str/mod.rs b/src/libcore/str/mod.rs index 0e8a2da3c110d..ef4bd83cbc5a6 100644 --- a/src/libcore/str/mod.rs +++ b/src/libcore/str/mod.rs @@ -1333,11 +1333,6 @@ impl<'a> Iterator for Lines<'a> { fn size_hint(&self) -> (usize, Option) { self.0.size_hint() } - - #[inline] - fn last(mut self) -> Option { - self.next_back() - } } #[stable(feature = "rust1", since = "1.0.0")] @@ -1384,11 +1379,6 @@ impl<'a> Iterator for LinesAny<'a> { fn size_hint(&self) -> (usize, Option) { self.0.size_hint() } - - #[inline] - fn last(mut self) -> Option { - self.next_back() - } } #[stable(feature = "rust1", since = "1.0.0")] @@ -4231,11 +4221,6 @@ impl<'a> Iterator for SplitWhitespace<'a> { fn size_hint(&self) -> (usize, Option) { self.inner.size_hint() } - - #[inline] - fn last(mut self) -> Option { - self.next_back() - } } #[stable(feature = "split_whitespace", since = "1.1.0")] @@ -4262,11 +4247,6 @@ impl<'a> Iterator for SplitAsciiWhitespace<'a> { fn size_hint(&self) -> (usize, Option) { self.inner.size_hint() } - - #[inline] - fn last(mut self) -> Option { - self.next_back() - } } #[stable(feature = "split_ascii_whitespace", since = "1.34.0")] diff --git a/src/libstd/env.rs b/src/libstd/env.rs index 260624a8bd859..9058ea93d6de0 100644 --- a/src/libstd/env.rs +++ b/src/libstd/env.rs @@ -746,10 +746,6 @@ impl Iterator for Args { self.inner.next().map(|s| s.into_string().unwrap()) } fn size_hint(&self) -> (usize, Option) { self.inner.size_hint() } - #[inline] - fn last(mut self) -> Option { - self.next_back() - } } #[stable(feature = "env", since = "1.0.0")] @@ -785,8 +781,6 @@ impl Iterator for ArgsOs { type Item = OsString; fn next(&mut self) -> Option { self.inner.next() } fn size_hint(&self) -> (usize, Option) { self.inner.size_hint() } - #[inline] - fn last(mut self) -> Option { self.next_back() } } #[stable(feature = "env", since = "1.0.0")] diff --git a/src/libstd/path.rs b/src/libstd/path.rs index 59f9e439add24..126bc3754dabc 100644 --- a/src/libstd/path.rs +++ b/src/libstd/path.rs @@ -888,11 +888,6 @@ impl<'a> Iterator for Iter<'a> { fn next(&mut self) -> Option<&'a OsStr> { self.inner.next().map(Component::as_os_str) } - - #[inline] - fn last(mut self) -> Option<&'a OsStr> { - self.next_back() - } } #[stable(feature = "rust1", since = "1.0.0")] @@ -956,11 +951,6 @@ impl<'a> Iterator for Components<'a> { } None } - - #[inline] - fn last(mut self) -> Option { - self.next_back() - } } #[stable(feature = "rust1", since = "1.0.0")] diff --git a/src/libstd/sys/unix/args.rs b/src/libstd/sys/unix/args.rs index 6ba947d4598b1..3b4de56f2c9b7 100644 --- a/src/libstd/sys/unix/args.rs +++ b/src/libstd/sys/unix/args.rs @@ -35,8 +35,6 @@ impl Iterator for Args { type Item = OsString; fn next(&mut self) -> Option { self.iter.next() } fn size_hint(&self) -> (usize, Option) { self.iter.size_hint() } - #[inline] - fn last(mut self) -> Option { self.next_back() } } impl ExactSizeIterator for Args { diff --git a/src/libstd/sys/wasm/args.rs b/src/libstd/sys/wasm/args.rs index 6766099c1ece1..b3c77b8699563 100644 --- a/src/libstd/sys/wasm/args.rs +++ b/src/libstd/sys/wasm/args.rs @@ -37,10 +37,6 @@ impl Iterator for Args { fn size_hint(&self) -> (usize, Option) { self.iter.size_hint() } - #[inline] - fn last(mut self) -> Option { - self.next_back() - } } impl ExactSizeIterator for Args { diff --git a/src/libstd/sys/windows/args.rs b/src/libstd/sys/windows/args.rs index 744d7ec59d3a3..b04bb484eedb9 100644 --- a/src/libstd/sys/windows/args.rs +++ b/src/libstd/sys/windows/args.rs @@ -181,8 +181,6 @@ impl Iterator for Args { type Item = OsString; fn next(&mut self) -> Option { self.parsed_args_list.next() } fn size_hint(&self) -> (usize, Option) { self.parsed_args_list.size_hint() } - #[inline] - fn last(mut self) -> Option { self.next_back() } } impl DoubleEndedIterator for Args { From 4f22a662cd9e7f6b8d13727461af69cac78aec35 Mon Sep 17 00:00:00 2001 From: Michael Woerister Date: Tue, 21 May 2019 13:41:44 +0200 Subject: [PATCH 5/5] debuginfo: Revert to old/more verbose behavior for -Cdebuginfo=1. https://github.com/rust-lang/rust/commit/cff075009 made LLVM emit less debuginfo when compiling with "line-tables-only". The change was essentially correct but the reduced amount of debuginfo broke a number of tools. This commit reverts the change so we get back the old behavior, until we figure out how to do this properly and give external tools to adapt to the new format. See https://github.com/rust-lang/rust/issues/60020 for more info. --- .../debuginfo/metadata.rs | 23 +++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/src/librustc_codegen_llvm/debuginfo/metadata.rs b/src/librustc_codegen_llvm/debuginfo/metadata.rs index 9bdce37b8baec..13590faa12384 100644 --- a/src/librustc_codegen_llvm/debuginfo/metadata.rs +++ b/src/librustc_codegen_llvm/debuginfo/metadata.rs @@ -31,7 +31,7 @@ use rustc::ty::{self, AdtKind, ParamEnv, Ty, TyCtxt}; use rustc::ty::layout::{self, Align, Integer, IntegerExt, LayoutOf, PrimitiveExt, Size, TyLayout, VariantIdx}; use rustc::ty::subst::UnpackedKind; -use rustc::session::config; +use rustc::session::config::{self, DebugInfo}; use rustc::util::nodemap::FxHashMap; use rustc_fs_util::path_to_c_string; use rustc_data_structures::small_c_str::SmallCStr; @@ -925,7 +925,26 @@ pub fn compile_unit_metadata(tcx: TyCtxt<'_, '_, '_>, let producer = CString::new(producer).unwrap(); let flags = "\0"; let split_name = "\0"; - let kind = DebugEmissionKind::from_generic(tcx.sess.opts.debuginfo); + + // FIXME(#60020): + // + // This should actually be + // + // ``` + // let kind = DebugEmissionKind::from_generic(tcx.sess.opts.debuginfo); + // ``` + // + // that is, we should set LLVM's emission kind to `LineTablesOnly` if + // we are compiling with "limited" debuginfo. However, some of the + // existing tools relied on slightly more debuginfo being generated than + // would be the case with `LineTablesOnly`, and we did not want to break + // these tools in a "drive-by fix", without a good idea or plan about + // what limited debuginfo should exactly look like. So for now we keep + // the emission kind as `FullDebug`. + // + // See https://github.com/rust-lang/rust/issues/60020 for details. + let kind = DebugEmissionKind::FullDebug; + assert!(tcx.sess.opts.debuginfo != DebugInfo::None); unsafe { let file_metadata = llvm::LLVMRustDIBuilderCreateFile(