Auto merge of #63655 - Centril:rollup-ty1ot40, r=Centril
Rollup of 4 pull requests Successful merges: - #62737 (Override Cycle::try_fold) - #63505 (Hash the remapped sysroot instead of the original.) - #63559 (rustc_codegen_utils: account for 1-indexed anonymous lifetimes in v0 mangling.) - #63621 (Modify librustc_llvm to pass -DNDEBUG while compiling.) Failed merges: r? @ghost
This commit is contained in:
commit
ac60ca0643
9 changed files with 77 additions and 10 deletions
|
@ -790,6 +790,9 @@ pub fn build_codegen_backend(builder: &Builder<'_>,
|
|||
if builder.config.llvm_use_libcxx {
|
||||
cargo.env("LLVM_USE_LIBCXX", "1");
|
||||
}
|
||||
if builder.config.llvm_optimize && !builder.config.llvm_release_debuginfo {
|
||||
cargo.env("LLVM_NDEBUG", "1");
|
||||
}
|
||||
}
|
||||
_ => panic!("unknown backend: {}", backend),
|
||||
}
|
||||
|
|
|
@ -405,6 +405,36 @@ impl<I> Iterator for Cycle<I> where I: Clone + Iterator {
|
|||
_ => (usize::MAX, None)
|
||||
}
|
||||
}
|
||||
|
||||
#[inline]
|
||||
fn try_fold<Acc, F, R>(&mut self, mut acc: Acc, mut f: F) -> R
|
||||
where
|
||||
F: FnMut(Acc, Self::Item) -> R,
|
||||
R: Try<Ok = Acc>,
|
||||
{
|
||||
// fully iterate the current iterator. this is necessary because
|
||||
// `self.iter` may be empty even when `self.orig` isn't
|
||||
acc = self.iter.try_fold(acc, &mut f)?;
|
||||
self.iter = self.orig.clone();
|
||||
|
||||
// complete a full cycle, keeping track of whether the cycled
|
||||
// iterator is empty or not. we need to return early in case
|
||||
// of an empty iterator to prevent an infinite loop
|
||||
let mut is_empty = true;
|
||||
acc = self.iter.try_fold(acc, |acc, x| {
|
||||
is_empty = false;
|
||||
f(acc, x)
|
||||
})?;
|
||||
|
||||
if is_empty {
|
||||
return Try::from_ok(acc);
|
||||
}
|
||||
|
||||
loop {
|
||||
self.iter = self.orig.clone();
|
||||
acc = self.iter.try_fold(acc, &mut f)?;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[stable(feature = "fused", since = "1.26.0")]
|
||||
|
|
|
@ -1152,6 +1152,18 @@ fn test_cycle() {
|
|||
assert_eq!(empty::<i32>().cycle().fold(0, |acc, x| acc + x), 0);
|
||||
|
||||
assert_eq!(once(1).cycle().skip(1).take(4).fold(0, |acc, x| acc + x), 4);
|
||||
|
||||
assert_eq!((0..10).cycle().take(5).sum::<i32>(), 10);
|
||||
assert_eq!((0..10).cycle().take(15).sum::<i32>(), 55);
|
||||
assert_eq!((0..10).cycle().take(25).sum::<i32>(), 100);
|
||||
|
||||
let mut iter = (0..10).cycle();
|
||||
iter.nth(14);
|
||||
assert_eq!(iter.take(8).sum::<i32>(), 38);
|
||||
|
||||
let mut iter = (0..10).cycle();
|
||||
iter.nth(9);
|
||||
assert_eq!(iter.take(3).sum::<i32>(), 3);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
|
|
@ -395,7 +395,7 @@ top_level_options!(
|
|||
output_types: OutputTypes [TRACKED],
|
||||
search_paths: Vec<SearchPath> [UNTRACKED],
|
||||
libs: Vec<(String, Option<String>, Option<cstore::NativeLibraryKind>)> [TRACKED],
|
||||
maybe_sysroot: Option<PathBuf> [TRACKED],
|
||||
maybe_sysroot: Option<PathBuf> [UNTRACKED],
|
||||
|
||||
target_triple: TargetTriple [TRACKED],
|
||||
|
||||
|
|
|
@ -198,10 +198,14 @@ impl SymbolMangler<'tcx> {
|
|||
|
||||
let lifetimes = regions.into_iter().map(|br| {
|
||||
match br {
|
||||
ty::BrAnon(i) => i + 1,
|
||||
ty::BrAnon(i) => {
|
||||
// FIXME(eddyb) for some reason, `anonymize_late_bound_regions` starts at `1`.
|
||||
assert_ne!(i, 0);
|
||||
i - 1
|
||||
},
|
||||
_ => bug!("symbol_names: non-anonymized region `{:?}` in `{:?}`", br, value),
|
||||
}
|
||||
}).max().unwrap_or(0);
|
||||
}).max().map_or(0, |max| max + 1);
|
||||
|
||||
self.push_opt_integer_62("G", lifetimes as u64);
|
||||
lifetime_depths.end += lifetimes;
|
||||
|
@ -297,6 +301,10 @@ impl Printer<'tcx> for SymbolMangler<'tcx> {
|
|||
// Late-bound lifetimes use indices starting at 1,
|
||||
// see `BinderLevel` for more details.
|
||||
ty::ReLateBound(debruijn, ty::BrAnon(i)) => {
|
||||
// FIXME(eddyb) for some reason, `anonymize_late_bound_regions` starts at `1`.
|
||||
assert_ne!(i, 0);
|
||||
let i = i - 1;
|
||||
|
||||
let binder = &self.binders[self.binders.len() - 1 - debruijn.index()];
|
||||
let depth = binder.lifetime_depths.start + i;
|
||||
|
||||
|
|
|
@ -151,6 +151,10 @@ fn main() {
|
|||
cfg.define("LLVM_RUSTLLVM", None);
|
||||
}
|
||||
|
||||
if env::var_os("LLVM_NDEBUG").is_some() {
|
||||
cfg.define("NDEBUG", None);
|
||||
}
|
||||
|
||||
build_helper::rerun_if_changed_anything_in_dir(Path::new("../rustllvm"));
|
||||
cfg.file("../rustllvm/PassWrapper.cpp")
|
||||
.file("../rustllvm/RustWrapper.cpp")
|
||||
|
|
|
@ -5,7 +5,8 @@
|
|||
# Objects are reproducible but their path is not.
|
||||
|
||||
all: \
|
||||
fat_lto
|
||||
fat_lto \
|
||||
sysroot
|
||||
|
||||
fat_lto:
|
||||
rm -rf $(TMPDIR) && mkdir $(TMPDIR)
|
||||
|
@ -14,3 +15,12 @@ fat_lto:
|
|||
cp $(TMPDIR)/reproducible-build $(TMPDIR)/reproducible-build-a
|
||||
$(RUSTC) reproducible-build.rs -C lto=fat
|
||||
cmp "$(TMPDIR)/reproducible-build-a" "$(TMPDIR)/reproducible-build" || exit 1
|
||||
|
||||
sysroot:
|
||||
rm -rf $(TMPDIR) && mkdir $(TMPDIR)
|
||||
$(RUSTC) reproducible-build-aux.rs
|
||||
$(RUSTC) reproducible-build.rs --crate-type rlib --sysroot $(shell $(RUSTC) --print sysroot) --remap-path-prefix=$(shell $(RUSTC) --print sysroot)=/sysroot
|
||||
cp -r $(shell $(RUSTC) --print sysroot) $(TMPDIR)/sysroot
|
||||
cp $(TMPDIR)/libreproducible_build.rlib $(TMPDIR)/libfoo.rlib
|
||||
$(RUSTC) reproducible-build.rs --crate-type rlib --sysroot $(TMPDIR)/sysroot --remap-path-prefix=$(TMPDIR)/sysroot=/sysroot
|
||||
cmp "$(TMPDIR)/libreproducible_build.rlib" "$(TMPDIR)/libfoo.rlib" || exit 1
|
||||
|
|
|
@ -64,9 +64,9 @@ fn main() {
|
|||
//[legacy]~^ ERROR symbol-name(_ZN198_$LT$$u5b$$RF$dyn$u20$impl1..Foo$u2b$Assoc$u20$$u3d$$u20$extern$u20$$u22$C$u22$$u20$fn$LP$$RF$u8$RP$$u2b$impl1..AutoTrait$u3b$$u20$_$u5d$$u20$as$u20$impl1..main..$u7b$$u7b$closure$u7d$$u7d$..Bar$GT$6method
|
||||
//[legacy]~| ERROR demangling(<[&dyn impl1::Foo+Assoc = extern "C" fn(&u8)+impl1::AutoTrait; _] as impl1::main::{{closure}}::Bar>::method
|
||||
//[legacy]~| ERROR demangling-alt(<[&dyn impl1::Foo+Assoc = extern "C" fn(&u8)+impl1::AutoTrait; _] as impl1::main::{{closure}}::Bar>::method)
|
||||
//[v0]~^^^^ ERROR symbol-name(_RNvXNCNvCs4fqI2P2rA04_5impl14mains_0ARDNtB6_3Foop5AssocFG0_KCRL0_hEuNtB6_9AutoTraitEL_j3_NtB2_3Bar6method)
|
||||
//[v0]~| ERROR demangling(<[&dyn impl1[317d481089b8c8fe]::Foo<Assoc = for<'a, 'b> extern "C" fn(&'b u8)> + impl1[317d481089b8c8fe]::AutoTrait; 3: usize] as impl1[317d481089b8c8fe]::main::{closure#1}::Bar>::method)
|
||||
//[v0]~| ERROR demangling-alt(<[&dyn impl1::Foo<Assoc = for<'a, 'b> extern "C" fn(&'b u8)> + impl1::AutoTrait; 3] as impl1::main::{closure#1}::Bar>::method)
|
||||
//[v0]~^^^^ ERROR symbol-name(_RNvXNCNvCs4fqI2P2rA04_5impl14mains_0ARDNtB6_3Foop5AssocFG_KCRL0_hEuNtB6_9AutoTraitEL_j3_NtB2_3Bar6method)
|
||||
//[v0]~| ERROR demangling(<[&dyn impl1[317d481089b8c8fe]::Foo<Assoc = for<'a> extern "C" fn(&'a u8)> + impl1[317d481089b8c8fe]::AutoTrait; 3: usize] as impl1[317d481089b8c8fe]::main::{closure#1}::Bar>::method)
|
||||
//[v0]~| ERROR demangling-alt(<[&dyn impl1::Foo<Assoc = for<'a> extern "C" fn(&'a u8)> + impl1::AutoTrait; 3] as impl1::main::{closure#1}::Bar>::method)
|
||||
#[rustc_def_path]
|
||||
//[legacy]~^ ERROR def-path(<[&dyn Foo<Assoc = for<'r> extern "C" fn(&'r u8)> + AutoTrait; _] as main::{{closure}}#1::Bar>::method)
|
||||
//[v0]~^^ ERROR def-path(<[&dyn Foo<Assoc = for<'r> extern "C" fn(&'r u8)> + AutoTrait; _] as main::{{closure}}#1::Bar>::method)
|
||||
|
|
|
@ -46,19 +46,19 @@ error: def-path(bar::<impl foo::Foo>::baz)
|
|||
LL | #[rustc_def_path]
|
||||
| ^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: symbol-name(_RNvXNCNvCs4fqI2P2rA04_5impl14mains_0ARDNtB6_3Foop5AssocFG0_KCRL0_hEuNtB6_9AutoTraitEL_j3_NtB2_3Bar6method)
|
||||
error: symbol-name(_RNvXNCNvCs4fqI2P2rA04_5impl14mains_0ARDNtB6_3Foop5AssocFG_KCRL0_hEuNtB6_9AutoTraitEL_j3_NtB2_3Bar6method)
|
||||
--> $DIR/impl1.rs:63:13
|
||||
|
|
||||
LL | #[rustc_symbol_name]
|
||||
| ^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: demangling(<[&dyn impl1[317d481089b8c8fe]::Foo<Assoc = for<'a, 'b> extern "C" fn(&'b u8)> + impl1[317d481089b8c8fe]::AutoTrait; 3: usize] as impl1[317d481089b8c8fe]::main::{closure#1}::Bar>::method)
|
||||
error: demangling(<[&dyn impl1[317d481089b8c8fe]::Foo<Assoc = for<'a> extern "C" fn(&'a u8)> + impl1[317d481089b8c8fe]::AutoTrait; 3: usize] as impl1[317d481089b8c8fe]::main::{closure#1}::Bar>::method)
|
||||
--> $DIR/impl1.rs:63:13
|
||||
|
|
||||
LL | #[rustc_symbol_name]
|
||||
| ^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: demangling-alt(<[&dyn impl1::Foo<Assoc = for<'a, 'b> extern "C" fn(&'b u8)> + impl1::AutoTrait; 3] as impl1::main::{closure#1}::Bar>::method)
|
||||
error: demangling-alt(<[&dyn impl1::Foo<Assoc = for<'a> extern "C" fn(&'a u8)> + impl1::AutoTrait; 3] as impl1::main::{closure#1}::Bar>::method)
|
||||
--> $DIR/impl1.rs:63:13
|
||||
|
|
||||
LL | #[rustc_symbol_name]
|
||||
|
|
Loading…
Reference in a new issue