diff options
| author | Ralf Jung <post@ralfj.de> | 2021-09-29 13:47:41 -0400 |
|---|---|---|
| committer | Ralf Jung <post@ralfj.de> | 2021-09-29 13:47:41 -0400 |
| commit | 268bb46db29299d8946cafdc70d8c1eaf2756106 (patch) | |
| tree | ca26562935cb0775c14deebf760fbc8dc79342b2 /compiler/rustc_const_eval | |
| parent | 35f74c24a3c205eeb85717e4a0cd8535b7ac8f0e (diff) | |
| download | rust-268bb46db29299d8946cafdc70d8c1eaf2756106.tar.gz rust-268bb46db29299d8946cafdc70d8c1eaf2756106.zip | |
CTFE: extra assertions for Aggregate rvalues; remove unnecessarily eager special case
Diffstat (limited to 'compiler/rustc_const_eval')
| -rw-r--r-- | compiler/rustc_const_eval/src/interpret/step.rs | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/compiler/rustc_const_eval/src/interpret/step.rs b/compiler/rustc_const_eval/src/interpret/step.rs index bbf7f3a5c3d..e6037d561de 100644 --- a/compiler/rustc_const_eval/src/interpret/step.rs +++ b/compiler/rustc_const_eval/src/interpret/step.rs @@ -197,12 +197,17 @@ impl<'mir, 'tcx: 'mir, M: Machine<'mir, 'tcx>> InterpCx<'mir, 'tcx, M> { } Aggregate(ref kind, ref operands) => { + // active_field_index is for union initialization. let (dest, active_field_index) = match **kind { mir::AggregateKind::Adt(adt_def, variant_index, _, _, active_field_index) => { self.write_discriminant(variant_index, &dest)?; if adt_def.is_enum() { - (self.place_downcast(&dest, variant_index)?, active_field_index) + assert!(active_field_index.is_none()); + (self.place_downcast(&dest, variant_index)?, None) } else { + if active_field_index.is_some() { + assert_eq!(operands.len(), 1); + } (dest, active_field_index) } } @@ -211,12 +216,9 @@ impl<'mir, 'tcx: 'mir, M: Machine<'mir, 'tcx>> InterpCx<'mir, 'tcx, M> { for (i, operand) in operands.iter().enumerate() { let op = self.eval_operand(operand, None)?; - // Ignore zero-sized fields. - if !op.layout.is_zst() { - let field_index = active_field_index.unwrap_or(i); - let field_dest = self.place_field(&dest, field_index)?; - self.copy_op(&op, &field_dest)?; - } + let field_index = active_field_index.unwrap_or(i); + let field_dest = self.place_field(&dest, field_index)?; + self.copy_op(&op, &field_dest)?; } } |
