diff options
| author | Jakob Degen <jakob.e.degen@gmail.com> | 2022-03-24 18:25:37 -0400 |
|---|---|---|
| committer | Jakob Degen <jakob.e.degen@gmail.com> | 2022-04-11 15:18:53 -0400 |
| commit | 2f4a7a074299a1450f02365de2d80a8c13f03510 (patch) | |
| tree | a3f9c507b1c1518f6d42c15b02eaab7a6753bfa6 /compiler/rustc_const_eval/src | |
| parent | dae5c842fca09a4da272ec003285a8867cf906eb (diff) | |
| download | rust-2f4a7a074299a1450f02365de2d80a8c13f03510.tar.gz rust-2f4a7a074299a1450f02365de2d80a8c13f03510.zip | |
Adjust computation of place types to detect more invalid places
Diffstat (limited to 'compiler/rustc_const_eval/src')
| -rw-r--r-- | compiler/rustc_const_eval/src/transform/validate.rs | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/compiler/rustc_const_eval/src/transform/validate.rs b/compiler/rustc_const_eval/src/transform/validate.rs index 58a7f6d1be0..af58bcabdf2 100644 --- a/compiler/rustc_const_eval/src/transform/validate.rs +++ b/compiler/rustc_const_eval/src/transform/validate.rs @@ -3,8 +3,8 @@ use rustc_index::bit_set::BitSet; use rustc_infer::infer::TyCtxtInferExt; use rustc_middle::mir::interpret::Scalar; -use rustc_middle::mir::traversal; use rustc_middle::mir::visit::{PlaceContext, Visitor}; +use rustc_middle::mir::{traversal, Place}; use rustc_middle::mir::{ AggregateKind, BasicBlock, Body, BorrowKind, Local, Location, MirPass, MirPhase, Operand, PlaceElem, PlaceRef, ProjectionElem, Rvalue, SourceScope, Statement, StatementKind, Terminator, @@ -240,6 +240,14 @@ impl<'a, 'tcx> Visitor<'tcx> for TypeChecker<'a, 'tcx> { self.super_projection_elem(local, proj_base, elem, context, location); } + fn visit_place(&mut self, place: &Place<'tcx>, _: PlaceContext, location: Location) { + // Set off any `bug!`s in the type computation code + let ty = place.ty(&self.body.local_decls, self.tcx); + if ty.variant_index.is_some() { + self.fail(location, "Top level places may not have their variant index set!"); + } + } + fn visit_statement(&mut self, statement: &Statement<'tcx>, location: Location) { match &statement.kind { StatementKind::Assign(box (dest, rvalue)) => { |
