mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-01 15:01:51 +00:00
Relax restrictions for copy operands
This commit is contained in:
parent
5ffebc2cb3
commit
ae7d6facda
@ -214,7 +214,8 @@ impl<'a, 'tcx> Visitor<'tcx> for TypeChecker<'a, 'tcx> {
|
|||||||
|
|
||||||
fn visit_operand(&mut self, operand: &Operand<'tcx>, location: Location) {
|
fn visit_operand(&mut self, operand: &Operand<'tcx>, location: Location) {
|
||||||
// This check is somewhat expensive, so only run it when -Zvalidate-mir is passed.
|
// This check is somewhat expensive, so only run it when -Zvalidate-mir is passed.
|
||||||
if self.tcx.sess.opts.debugging_opts.validate_mir {
|
if self.tcx.sess.opts.debugging_opts.validate_mir && self.mir_phase < MirPhase::DropsLowered
|
||||||
|
{
|
||||||
// `Operand::Copy` is only supposed to be used with `Copy` types.
|
// `Operand::Copy` is only supposed to be used with `Copy` types.
|
||||||
if let Operand::Copy(place) = operand {
|
if let Operand::Copy(place) = operand {
|
||||||
let ty = place.ty(&self.body.local_decls, self.tcx).ty;
|
let ty = place.ty(&self.body.local_decls, self.tcx).ty;
|
||||||
|
@ -166,7 +166,8 @@ pub enum MirPhase {
|
|||||||
/// * [`StatementKind::Retag`]
|
/// * [`StatementKind::Retag`]
|
||||||
///
|
///
|
||||||
/// Furthermore, `Drop` now uses explicit drop flags visible in the MIR and reaching a `Drop`
|
/// Furthermore, `Drop` now uses explicit drop flags visible in the MIR and reaching a `Drop`
|
||||||
/// terminator means that the auto-generated drop glue will be invoked.
|
/// terminator means that the auto-generated drop glue will be invoked. Also, `Copy` operands
|
||||||
|
/// are allowed for non-`Copy` types.
|
||||||
DropsLowered = 3,
|
DropsLowered = 3,
|
||||||
/// Beginning with this phase, the following variant is disallowed:
|
/// Beginning with this phase, the following variant is disallowed:
|
||||||
/// * [`Rvalue::Aggregate`] for any `AggregateKind` except `Array`
|
/// * [`Rvalue::Aggregate`] for any `AggregateKind` except `Array`
|
||||||
@ -2330,7 +2331,10 @@ pub struct SourceScopeLocalData {
|
|||||||
/// validator.
|
/// validator.
|
||||||
#[derive(Clone, PartialEq, TyEncodable, TyDecodable, Hash, HashStable)]
|
#[derive(Clone, PartialEq, TyEncodable, TyDecodable, Hash, HashStable)]
|
||||||
pub enum Operand<'tcx> {
|
pub enum Operand<'tcx> {
|
||||||
/// Creates a value by loading the given place. The type of the place must be `Copy`
|
/// Creates a value by loading the given place.
|
||||||
|
///
|
||||||
|
/// Before drop elaboration, the type of the place must be `Copy`. After drop elaboration there
|
||||||
|
/// is no such requirement.
|
||||||
Copy(Place<'tcx>),
|
Copy(Place<'tcx>),
|
||||||
|
|
||||||
/// Creates a value by performing loading the place, just like the `Copy` operand.
|
/// Creates a value by performing loading the place, just like the `Copy` operand.
|
||||||
|
Loading…
Reference in New Issue
Block a user