Skip to content

Commit

Permalink
Auto merge of rust-lang#132042 - matthiaskrgr:rollup-eloj566, r=matth…
Browse files Browse the repository at this point in the history
…iaskrgr

Rollup of 4 pull requests

Successful merges:

 - rust-lang#132002 (abi/compatibility: also test Option-like types)
 - rust-lang#132026 (analyse: remove unused uncanonicalized field)
 - rust-lang#132036 (Add a test case for rust-lang#131164)
 - rust-lang#132040 (relnotes: fix stabilizations of `assume_init`)

r? `@ghost`
`@rustbot` modify labels: rollup
  • Loading branch information
bors committed Oct 22, 2024
2 parents 86d69c7 + 9aaeadc commit abf7479
Show file tree
Hide file tree
Showing 10 changed files with 54 additions and 29 deletions.
6 changes: 3 additions & 3 deletions RELEASES.md
Original file line number Diff line number Diff line change
Expand Up @@ -68,15 +68,15 @@ Stabilized APIs
- [`impl Default for std::collections::vec_deque::Iter`](https://doc.rust-lang.org/nightly/std/collections/vec_deque/struct.Iter.html#impl-Default-for-Iter%3C'_,+T%3E)
- [`impl Default for std::collections::vec_deque::IterMut`](https://doc.rust-lang.org/nightly/std/collections/vec_deque/struct.IterMut.html#impl-Default-for-IterMut%3C'_,+T%3E)
- [`Rc<T>::new_uninit`](https://doc.rust-lang.org/nightly/std/rc/struct.Rc.html#method.new_uninit)
- [`Rc<T>::assume_init`](https://doc.rust-lang.org/nightly/std/rc/struct.Rc.html#method.assume_init)
- [`Rc<MaybeUninit<T>>::assume_init`](https://doc.rust-lang.org/nightly/std/rc/struct.Rc.html#method.assume_init)
- [`Rc<[T]>::new_uninit_slice`](https://doc.rust-lang.org/nightly/std/rc/struct.Rc.html#method.new_uninit_slice)
- [`Rc<[MaybeUninit<T>]>::assume_init`](https://doc.rust-lang.org/nightly/std/rc/struct.Rc.html#method.assume_init-1)
- [`Arc<T>::new_uninit`](https://doc.rust-lang.org/nightly/std/sync/struct.Arc.html#method.new_uninit)
- [`Arc<T>::assume_init`](https://doc.rust-lang.org/nightly/std/sync/struct.Arc.html#method.assume_init)
- [`Arc<MaybeUninit<T>>::assume_init`](https://doc.rust-lang.org/nightly/std/sync/struct.Arc.html#method.assume_init)
- [`Arc<[T]>::new_uninit_slice`](https://doc.rust-lang.org/nightly/std/sync/struct.Arc.html#method.new_uninit_slice)
- [`Arc<[MaybeUninit<T>]>::assume_init`](https://doc.rust-lang.org/nightly/std/sync/struct.Arc.html#method.assume_init-1)
- [`Box<T>::new_uninit`](https://doc.rust-lang.org/nightly/std/boxed/struct.Box.html#method.new_uninit)
- [`Box<T>::assume_init`](https://doc.rust-lang.org/nightly/std/boxed/struct.Box.html#method.assume_init)
- [`Box<MaybeUninit<T>>::assume_init`](https://doc.rust-lang.org/nightly/std/boxed/struct.Box.html#method.assume_init)
- [`Box<[T]>::new_uninit_slice`](https://doc.rust-lang.org/nightly/std/boxed/struct.Box.html#method.new_uninit_slice)
- [`Box<[MaybeUninit<T>]>::assume_init`](https://doc.rust-lang.org/nightly/std/boxed/struct.Box.html#method.assume_init-1)
- [`core::arch::x86_64::_bextri_u64`](https://doc.rust-lang.org/stable/core/arch/x86_64/fn._bextri_u64.html)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -170,7 +170,7 @@ where
//
// We don't do so for `NormalizesTo` goals as we erased the expected term and
// bailing with overflow here would prevent us from detecting a type-mismatch,
// causing a coherence error in diesel, see #131969. We still bail with verflow
// causing a coherence error in diesel, see #131969. We still bail with overflow
// when later returning from the parent AliasRelate goal.
if !self.is_normalizes_to_goal {
let num_non_region_vars =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -291,7 +291,7 @@ where
search_graph,
nested_goals: NestedGoals::new(),
tainted: Ok(()),
inspect: canonical_goal_evaluation.new_goal_evaluation_step(var_values, input),
inspect: canonical_goal_evaluation.new_goal_evaluation_step(var_values),
};

for &(key, ty) in &input.predefined_opaques_in_body.opaque_types {
Expand Down
16 changes: 6 additions & 10 deletions compiler/rustc_next_trait_solver/src/solve/inspect/build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ use rustc_type_ir::{self as ty, Interner};
use crate::delegate::SolverDelegate;
use crate::solve::eval_ctxt::canonical;
use crate::solve::{
CanonicalInput, Certainty, GenerateProofTree, Goal, GoalEvaluationKind, GoalSource, QueryInput,
CanonicalInput, Certainty, GenerateProofTree, Goal, GoalEvaluationKind, GoalSource,
QueryResult, inspect,
};

Expand Down Expand Up @@ -119,6 +119,9 @@ impl<I: Interner> WipCanonicalGoalEvaluation<I> {
}
}

/// This only exists during proof tree building and does not have
/// a corresponding struct in `inspect`. We need this to track a
/// bunch of metadata about the current evaluation.
#[derive_where(PartialEq, Eq, Debug; I: Interner)]
struct WipCanonicalGoalEvaluationStep<I: Interner> {
/// Unlike `EvalCtxt::var_values`, we append a new
Expand All @@ -128,7 +131,6 @@ struct WipCanonicalGoalEvaluationStep<I: Interner> {
/// This is necessary as we otherwise don't unify these
/// vars when instantiating multiple `CanonicalState`.
var_values: Vec<I::GenericArg>,
instantiated_goal: QueryInput<I, I::Predicate>,
probe_depth: usize,
evaluation: WipProbe<I>,
}
Expand All @@ -145,16 +147,12 @@ impl<I: Interner> WipCanonicalGoalEvaluationStep<I> {
current
}

fn finalize(self) -> inspect::CanonicalGoalEvaluationStep<I> {
fn finalize(self) -> inspect::Probe<I> {
let evaluation = self.evaluation.finalize();
match evaluation.kind {
inspect::ProbeKind::Root { .. } => (),
inspect::ProbeKind::Root { .. } => evaluation,
_ => unreachable!("unexpected root evaluation: {evaluation:?}"),
}
inspect::CanonicalGoalEvaluationStep {
instantiated_goal: self.instantiated_goal,
evaluation,
}
}
}

Expand Down Expand Up @@ -328,11 +326,9 @@ impl<D: SolverDelegate<Interner = I>, I: Interner> ProofTreeBuilder<D> {
pub(crate) fn new_goal_evaluation_step(
&mut self,
var_values: ty::CanonicalVarValues<I>,
instantiated_goal: QueryInput<I, I::Predicate>,
) -> ProofTreeBuilder<D> {
self.nested(|| WipCanonicalGoalEvaluationStep {
var_values: var_values.var_values.to_vec(),
instantiated_goal,
evaluation: WipProbe {
initial_num_var_values: var_values.len(),
steps: vec![],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -344,7 +344,7 @@ impl<'a, 'tcx> InspectGoal<'a, 'tcx> {
};

let mut nested_goals = vec![];
self.candidates_recur(&mut candidates, &mut nested_goals, &last_eval_step.evaluation);
self.candidates_recur(&mut candidates, &mut nested_goals, &last_eval_step);

candidates
}
Expand Down
17 changes: 5 additions & 12 deletions compiler/rustc_type_ir/src/solve/inspect.rs
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,7 @@ use std::hash::Hash;
use derive_where::derive_where;
use rustc_type_ir_macros::{TypeFoldable_Generic, TypeVisitable_Generic};

use crate::solve::{
CandidateSource, CanonicalInput, Certainty, Goal, GoalSource, QueryInput, QueryResult,
};
use crate::solve::{CandidateSource, CanonicalInput, Certainty, Goal, GoalSource, QueryResult};
use crate::{Canonical, CanonicalVarValues, Interner};

/// Some `data` together with information about how they relate to the input
Expand Down Expand Up @@ -69,15 +67,10 @@ pub struct CanonicalGoalEvaluation<I: Interner> {
#[derive_where(PartialEq, Eq, Hash, Debug; I: Interner)]
pub enum CanonicalGoalEvaluationKind<I: Interner> {
Overflow,
Evaluation { final_revision: CanonicalGoalEvaluationStep<I> },
}

#[derive_where(PartialEq, Eq, Hash, Debug; I: Interner)]
pub struct CanonicalGoalEvaluationStep<I: Interner> {
pub instantiated_goal: QueryInput<I, I::Predicate>,

/// The actual evaluation of the goal, always `ProbeKind::Root`.
pub evaluation: Probe<I>,
Evaluation {
/// This is always `ProbeKind::Root`.
final_revision: Probe<I>,
},
}

/// A self-contained computation during trait solving. This either
Expand Down
7 changes: 7 additions & 0 deletions tests/run-make/rust-lld-link-script-provide/main.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
#[no_mangle]
fn foo() {}

#[no_mangle]
fn bar() {}

fn main() {}
12 changes: 12 additions & 0 deletions tests/run-make/rust-lld-link-script-provide/rmake.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
// This test ensures that the “symbol not found” error does not occur
// when the symbols in the `PROVIDE` of the link script can be eliminated.
// This is a regression test for #131164.

//@ needs-rust-lld
//@ only-x86_64-unknown-linux-gnu

use run_make_support::rustc;

fn main() {
rustc().input("main.rs").arg("-Zlinker-features=+lld").link_arg("-Tscript.t").run();
}
1 change: 1 addition & 0 deletions tests/run-make/rust-lld-link-script-provide/script.t
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
PROVIDE(foo = bar);
18 changes: 17 additions & 1 deletion tests/ui/abi/compatibility.rs
Original file line number Diff line number Diff line change
Expand Up @@ -211,6 +211,15 @@ impl Clone for Zst {
}
}

enum Either<T, U> {
Left(T),
Right(U),
}
enum Either2<T, U> {
Left(T),
Right(U, ()),
}

#[repr(C)]
enum ReprCEnum<T> {
Variant1,
Expand Down Expand Up @@ -328,7 +337,8 @@ mod unsized_ {
test_transparent_unsized!(dyn_trait, dyn Any);
}

// RFC 3391 <https://rust-lang.github.io/rfcs/3391-result_ffi_guarantees.html>.
// RFC 3391 <https://rust-lang.github.io/rfcs/3391-result_ffi_guarantees.html>, including the
// extension ratified at <https://github.com/rust-lang/rust/pull/130628#issuecomment-2402761599>.
macro_rules! test_nonnull {
($name:ident, $t:ty) => {
mod $name {
Expand All @@ -340,6 +350,12 @@ macro_rules! test_nonnull {
test_abi_compatible!(result_ok_zst, Result<Zst, $t>, $t);
test_abi_compatible!(result_err_arr, Result<$t, [i8; 0]>, $t);
test_abi_compatible!(result_ok_arr, Result<[i8; 0], $t>, $t);
test_abi_compatible!(result_err_void, Result<$t, Void>, $t);
test_abi_compatible!(result_ok_void, Result<Void, $t>, $t);
test_abi_compatible!(either_err_zst, Either<$t, Zst>, $t);
test_abi_compatible!(either_ok_zst, Either<Zst, $t>, $t);
test_abi_compatible!(either2_err_zst, Either2<$t, Zst>, $t);
test_abi_compatible!(either2_err_arr, Either2<$t, [i8; 0]>, $t);
}
}
}
Expand Down

0 comments on commit abf7479

Please sign in to comment.