diff --git a/Cargo.lock b/Cargo.lock index db9f0069ced0c..b651faac90281 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -25,7 +25,7 @@ dependencies = [ name = "alloc" version = "0.0.0" dependencies = [ - "compiler_builtins 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", + "compiler_builtins 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)", "core 0.0.0", "rand 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)", "rand_xorshift 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -123,7 +123,7 @@ version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "cc 1.0.35 (registry+https://github.com/rust-lang/crates.io-index)", - "compiler_builtins 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", + "compiler_builtins 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.54 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-std-workspace-core 1.0.0", ] @@ -462,7 +462,7 @@ dependencies = [ [[package]] name = "compiler_builtins" -version = "0.1.14" +version = "0.1.15" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "cc 1.0.35 (registry+https://github.com/rust-lang/crates.io-index)", @@ -744,7 +744,7 @@ name = "dlmalloc" version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "compiler_builtins 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", + "compiler_builtins 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.54 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-std-workspace-core 1.0.0", ] @@ -910,7 +910,7 @@ name = "fortanix-sgx-abi" version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "compiler_builtins 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", + "compiler_builtins 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-std-workspace-core 1.0.0", ] @@ -1071,7 +1071,7 @@ name = "hashbrown" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "compiler_builtins 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", + "compiler_builtins 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-std-workspace-alloc 1.0.0", "rustc-std-workspace-core 1.0.0", ] @@ -1772,7 +1772,7 @@ dependencies = [ name = "panic_abort" version = "0.0.0" dependencies = [ - "compiler_builtins 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", + "compiler_builtins 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)", "core 0.0.0", "libc 0.2.54 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1782,7 +1782,7 @@ name = "panic_unwind" version = "0.0.0" dependencies = [ "alloc 0.0.0", - "compiler_builtins 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", + "compiler_builtins 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)", "core 0.0.0", "libc 0.2.54 (registry+https://github.com/rust-lang/crates.io-index)", "unwind 0.0.0", @@ -1967,7 +1967,7 @@ name = "profiler_builtins" version = "0.0.0" dependencies = [ "cc 1.0.35 (registry+https://github.com/rust-lang/crates.io-index)", - "compiler_builtins 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", + "compiler_builtins 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)", "core 0.0.0", ] @@ -2492,7 +2492,7 @@ name = "rustc-demangle" version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "compiler_builtins 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", + "compiler_builtins 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-std-workspace-core 1.0.0", ] @@ -2620,7 +2620,7 @@ dependencies = [ "alloc 0.0.0", "build_helper 0.1.0", "cmake 0.1.38 (registry+https://github.com/rust-lang/crates.io-index)", - "compiler_builtins 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", + "compiler_builtins 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)", "core 0.0.0", ] @@ -2850,7 +2850,7 @@ dependencies = [ "alloc 0.0.0", "build_helper 0.1.0", "cmake 0.1.38 (registry+https://github.com/rust-lang/crates.io-index)", - "compiler_builtins 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", + "compiler_builtins 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)", "core 0.0.0", ] @@ -2912,7 +2912,7 @@ dependencies = [ "alloc 0.0.0", "build_helper 0.1.0", "cmake 0.1.38 (registry+https://github.com/rust-lang/crates.io-index)", - "compiler_builtins 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", + "compiler_builtins 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)", "core 0.0.0", ] @@ -3029,7 +3029,7 @@ dependencies = [ "alloc 0.0.0", "build_helper 0.1.0", "cmake 0.1.38 (registry+https://github.com/rust-lang/crates.io-index)", - "compiler_builtins 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", + "compiler_builtins 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)", "core 0.0.0", ] @@ -3298,7 +3298,7 @@ dependencies = [ "alloc 0.0.0", "backtrace-sys 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", "cc 1.0.35 (registry+https://github.com/rust-lang/crates.io-index)", - "compiler_builtins 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", + "compiler_builtins 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)", "core 0.0.0", "dlmalloc 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", "fortanix-sgx-abi 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3889,7 +3889,7 @@ name = "unwind" version = "0.0.0" dependencies = [ "cc 1.0.35 (registry+https://github.com/rust-lang/crates.io-index)", - "compiler_builtins 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", + "compiler_builtins 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)", "core 0.0.0", "libc 0.2.54 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -4087,7 +4087,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum colored 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b0aa3473e85a3161b59845d6096b289bb577874cafeaf75ea1b1beaa6572c7fc" "checksum commoncrypto 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d056a8586ba25a1e4d61cb090900e495952c7886786fc55f909ab2f819b69007" "checksum commoncrypto-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1fed34f46747aa73dfaa578069fd8279d2818ade2b55f38f22a9401c7f4083e2" -"checksum compiler_builtins 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)" = "e3f235c329e5cb9fa3d2ca2cc36256ba9a7f23fa76e0f4db6f68c23b73b2ac69" +"checksum compiler_builtins 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)" = "e899b947d7e71c3d35c0b6194d64025b84946640510e215090c815b20828964e" "checksum compiletest_rs 0.3.22 (registry+https://github.com/rust-lang/crates.io-index)" = "f40ecc9332b68270998995c00f8051ee856121764a0d3230e64c9efd059d27b6" "checksum constant_time_eq 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "8ff012e225ce166d4422e0e78419d901719760f62ae2b7969ca6b564d1b54a9e" "checksum core-foundation 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)" = "4e2640d6d0bf22e82bed1b73c6aef8d5dd31e5abe6666c57e6d45e2649f4f887" diff --git a/src/bootstrap/compile.rs b/src/bootstrap/compile.rs index e1cdd226fd6e5..2da5e1c5902c1 100644 --- a/src/bootstrap/compile.rs +++ b/src/bootstrap/compile.rs @@ -161,7 +161,33 @@ pub fn std_cargo(builder: &Builder<'_>, cargo.env("MACOSX_DEPLOYMENT_TARGET", target); } + // Determine if we're going to compile in optimized C intrinsics to + // the `compiler-builtins` crate. These intrinsics live in LLVM's + // `compiler-rt` repository, but our `src/llvm-project` submodule isn't + // always checked out, so we need to conditionally look for this. (e.g. if + // an external LLVM is used we skip the LLVM submodule checkout). + // + // Note that this shouldn't affect the correctness of `compiler-builtins`, + // but only its speed. Some intrinsics in C haven't been translated to Rust + // yet but that's pretty rare. Other intrinsics have optimized + // implementations in C which have only had slower versions ported to Rust, + // so we favor the C version where we can, but it's not critical. + // + // If `compiler-rt` is available ensure that the `c` feature of the + // `compiler-builtins` crate is enabled and it's configured to learn where + // `compiler-rt` is located. + let compiler_builtins_root = builder.src.join("src/llvm-project/compiler-rt"); + let compiler_builtins_c_feature = if compiler_builtins_root.exists() { + cargo.env("RUST_COMPILER_RT_ROOT", &compiler_builtins_root); + " compiler-builtins-c".to_string() + } else { + String::new() + }; + if builder.no_std(target) == Some(true) { + let mut features = "compiler-builtins-mem".to_string(); + features.push_str(&compiler_builtins_c_feature); + // for no-std targets we only compile a few no_std crates cargo .args(&["-p", "alloc"]) @@ -170,7 +196,8 @@ pub fn std_cargo(builder: &Builder<'_>, .arg("--features") .arg("compiler-builtins-mem compiler-builtins-c"); } else { - let features = builder.std_features(); + let mut features = builder.std_features(); + features.push_str(&compiler_builtins_c_feature); if compiler.stage != 0 && builder.config.sanitizers { // This variable is used by the sanitizer runtime crates, e.g. diff --git a/src/build_helper/lib.rs b/src/build_helper/lib.rs index 60911d917899f..8b00c1d81b08c 100644 --- a/src/build_helper/lib.rs +++ b/src/build_helper/lib.rs @@ -288,9 +288,9 @@ pub fn sanitizer_lib_boilerplate(sanitizer_name: &str) } else { format!("static={}", link_name) }; - // The source for `compiler-rt` comes from the `compiler-builtins` crate, so - // load our env var set by cargo to find the source code. - let dir = env::var_os("DEP_COMPILER_RT_COMPILER_RT").unwrap(); + // This env var is provided by rustbuild to tell us where `compiler-rt` + // lives. + let dir = env::var_os("RUST_COMPILER_RT_ROOT").unwrap(); let lib = native_lib_boilerplate( dir.as_ref(), sanitizer_name, diff --git a/src/ci/docker/dist-various-2/Dockerfile b/src/ci/docker/dist-various-2/Dockerfile index 869ee9883c100..e7d6f201b444e 100644 --- a/src/ci/docker/dist-various-2/Dockerfile +++ b/src/ci/docker/dist-various-2/Dockerfile @@ -24,7 +24,7 @@ RUN apt-get update && apt-get build-dep -y clang llvm && apt-get install -y --no gpg-agent RUN apt-key adv --batch --yes --keyserver keyserver.ubuntu.com --recv-keys 74DA7924C5513486 -RUN add-apt-repository -y 'deb http://apt.dilos.org/dilos dilos2-testing main' +RUN add-apt-repository -y 'deb http://apt.dilos.org/dilos dilos2 main' WORKDIR /tmp COPY dist-various-2/shared.sh /tmp/ diff --git a/src/ci/docker/x86_64-gnu-full-bootstrap/Dockerfile b/src/ci/docker/x86_64-gnu-full-bootstrap/Dockerfile index 70390c2ac1df1..a157fee16cfd5 100644 --- a/src/ci/docker/x86_64-gnu-full-bootstrap/Dockerfile +++ b/src/ci/docker/x86_64-gnu-full-bootstrap/Dockerfile @@ -20,3 +20,9 @@ ENV RUST_CONFIGURE_ARGS \ --build=x86_64-unknown-linux-gnu \ --enable-full-bootstrap ENV SCRIPT python2.7 ../x.py build + +# In general this just slows down the build and we're just a smoke test that +# a full bootstrap works in general, so there's not much need to take this +# penalty in build times. +ENV NO_LLVM_ASSERTIONS 1 +ENV NO_DEBUG_ASSERTIONS 1 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/libprofiler_builtins/build.rs b/src/libprofiler_builtins/build.rs index 331edb73d6df9..491986480deba 100644 --- a/src/libprofiler_builtins/build.rs +++ b/src/libprofiler_builtins/build.rs @@ -57,9 +57,7 @@ fn main() { cfg.define("COMPILER_RT_HAS_ATOMICS", Some("1")); } - // The source for `compiler-rt` comes from the `compiler-builtins` crate, so - // load our env var set by cargo to find the source code. - let root = env::var_os("DEP_COMPILER_RT_COMPILER_RT").unwrap(); + let root = env::var_os("RUST_COMPILER_RT_ROOT").unwrap(); let root = Path::new(&root); for src in profile_sources { diff --git a/src/librustc_codegen_ssa/back/link.rs b/src/librustc_codegen_ssa/back/link.rs index d5a56f6a09e02..c1ec2071789eb 100644 --- a/src/librustc_codegen_ssa/back/link.rs +++ b/src/librustc_codegen_ssa/back/link.rs @@ -96,7 +96,7 @@ pub fn link_binary<'a, B: ArchiveBuilder<'a>>(sess: &'a Session, } } if sess.opts.debugging_opts.emit_artifact_notifications { - sess.parse_sess.span_diagnostic.emit_artifact_notification(&out_filename); + sess.parse_sess.span_diagnostic.emit_artifact_notification(&out_filename, "link"); } } diff --git a/src/librustc_errors/emitter.rs b/src/librustc_errors/emitter.rs index 59cbd65f05c68..890d2c5ce0b80 100644 --- a/src/librustc_errors/emitter.rs +++ b/src/librustc_errors/emitter.rs @@ -56,7 +56,7 @@ pub trait Emitter { /// Emit a notification that an artifact has been output. /// This is currently only supported for the JSON format, /// other formats can, and will, simply ignore it. - fn emit_artifact_notification(&mut self, _path: &Path) {} + fn emit_artifact_notification(&mut self, _path: &Path, _artifact_type: &str) {} /// Checks if should show explanations about "rustc --explain" fn should_show_explain(&self) -> bool { @@ -1645,7 +1645,7 @@ impl<'a> WritableDst<'a> { } } Style::Quotation => {} - Style::OldSchoolNoteText | Style::MainHeaderMsg => { + Style::MainHeaderMsg => { spec.set_bold(true); if cfg!(windows) { spec.set_intense(true) diff --git a/src/librustc_errors/lib.rs b/src/librustc_errors/lib.rs index 3aa87fad07174..2dcf7be2aa8b1 100644 --- a/src/librustc_errors/lib.rs +++ b/src/librustc_errors/lib.rs @@ -769,8 +769,8 @@ impl Handler { } } - pub fn emit_artifact_notification(&self, path: &Path) { - self.emitter.borrow_mut().emit_artifact_notification(path); + pub fn emit_artifact_notification(&self, path: &Path, artifact_type: &str) { + self.emitter.borrow_mut().emit_artifact_notification(path, artifact_type); } } diff --git a/src/librustc_errors/snippet.rs b/src/librustc_errors/snippet.rs index a0af604026d4a..47ba22d3d25af 100644 --- a/src/librustc_errors/snippet.rs +++ b/src/librustc_errors/snippet.rs @@ -188,7 +188,6 @@ pub enum Style { UnderlineSecondary, LabelPrimary, LabelSecondary, - OldSchoolNoteText, NoStyle, Level(Level), Highlight, diff --git a/src/librustc_interface/passes.rs b/src/librustc_interface/passes.rs index 04041f8834420..4a96864dc9d66 100644 --- a/src/librustc_interface/passes.rs +++ b/src/librustc_interface/passes.rs @@ -1050,7 +1050,8 @@ fn encode_and_write_metadata<'tcx>( tcx.sess.fatal(&format!("failed to write {}: {}", out_filename.display(), e)); } if tcx.sess.opts.debugging_opts.emit_artifact_notifications { - tcx.sess.parse_sess.span_diagnostic.emit_artifact_notification(&out_filename); + tcx.sess.parse_sess.span_diagnostic + .emit_artifact_notification(&out_filename, "metadata"); } } diff --git a/src/libstd/Cargo.toml b/src/libstd/Cargo.toml index 55e8b39974e09..c4c1170e539ae 100644 --- a/src/libstd/Cargo.toml +++ b/src/libstd/Cargo.toml @@ -19,7 +19,7 @@ panic_unwind = { path = "../libpanic_unwind", optional = true } panic_abort = { path = "../libpanic_abort" } core = { path = "../libcore" } libc = { version = "0.2.51", default-features = false, features = ['rustc-dep-of-std'] } -compiler_builtins = { version = "0.1.14" } +compiler_builtins = { version = "0.1.15" } profiler_builtins = { path = "../libprofiler_builtins", optional = true } unwind = { path = "../libunwind" } hashbrown = { version = "0.3.0", features = ['rustc-dep-of-std'] } @@ -49,12 +49,12 @@ fortanix-sgx-abi = { version = "0.3.2", features = ['rustc-dep-of-std'] } cc = "1.0" [features] -default = ["compiler_builtins_c", "std_detect_file_io", "std_detect_dlsym_getauxval"] +default = ["std_detect_file_io", "std_detect_dlsym_getauxval"] backtrace = ["backtrace-sys"] panic-unwind = ["panic_unwind"] profiler = ["profiler_builtins"] -compiler_builtins_c = ["alloc/compiler-builtins-c"] +compiler-builtins-c = ["alloc/compiler-builtins-c"] llvm-libunwind = ["unwind/llvm-libunwind"] # Make panics and failed asserts immediately abort without formatting any message 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 { 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) diff --git a/src/libsyntax/json.rs b/src/libsyntax/json.rs index 2dd2ecb749300..767ab74355e66 100644 --- a/src/libsyntax/json.rs +++ b/src/libsyntax/json.rs @@ -92,8 +92,8 @@ impl Emitter for JsonEmitter { } } - fn emit_artifact_notification(&mut self, path: &Path) { - let data = ArtifactNotification { artifact: path }; + fn emit_artifact_notification(&mut self, path: &Path, artifact_type: &str) { + let data = ArtifactNotification { artifact: path, emit: artifact_type }; let result = if self.pretty { writeln!(&mut self.dst, "{}", as_pretty_json(&data)) } else { @@ -185,6 +185,8 @@ struct DiagnosticCode { struct ArtifactNotification<'a> { /// The path of the artifact. artifact: &'a Path, + /// What kind of artifact we're emitting. + emit: &'a str, } impl Diagnostic { diff --git a/src/llvm-project b/src/llvm-project index 2c5656ae59385..4efebe31651d5 160000 --- a/src/llvm-project +++ b/src/llvm-project @@ -1 +1 @@ -Subproject commit 2c5656ae593851d0b2336a727cc14b77a06b8ac0 +Subproject commit 4efebe31651d5520bcba968878dbb8a4971d2045 diff --git a/src/test/ui/emit-artifact-notifications.nll.stderr b/src/test/ui/emit-artifact-notifications.nll.stderr index 347d9aeac2307..5547631a4b022 100644 --- a/src/test/ui/emit-artifact-notifications.nll.stderr +++ b/src/test/ui/emit-artifact-notifications.nll.stderr @@ -1 +1 @@ -{"artifact":"$TEST_BUILD_DIR/emit-artifact-notifications.nll/libemit_artifact_notifications.rmeta"} +{"artifact":"$TEST_BUILD_DIR/emit-artifact-notifications.nll/libemit_artifact_notifications.rmeta","emit":"metadata"} diff --git a/src/test/ui/emit-artifact-notifications.stderr b/src/test/ui/emit-artifact-notifications.stderr index 56c977181ff51..260d41b8f15cc 100644 --- a/src/test/ui/emit-artifact-notifications.stderr +++ b/src/test/ui/emit-artifact-notifications.stderr @@ -1 +1 @@ -{"artifact":"$TEST_BUILD_DIR/emit-artifact-notifications/libemit_artifact_notifications.rmeta"} +{"artifact":"$TEST_BUILD_DIR/emit-artifact-notifications/libemit_artifact_notifications.rmeta","emit":"metadata"} 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 +