Skip to content

Commit

Permalink
Rollup merge of #101038 - RalfJung:interning-alignment, r=oli-obk
Browse files Browse the repository at this point in the history
no alignment check during interning

This should fix #101034
r? `@oli-obk`

Unfortunately we don't have a self-contained testcase for this problem. I am not sure how it can be triggered...
  • Loading branch information
matthiaskrgr committed Aug 28, 2022
2 parents c577021 + 468c617 commit 5b80814
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 3 deletions.
2 changes: 2 additions & 0 deletions compiler/rustc_const_eval/src/const_eval/eval_queries.rs
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,9 @@ fn eval_body_using_ecx<'mir, 'tcx>(
None => InternKind::Constant,
}
};
ecx.machine.check_alignment = false; // interning doesn't need to respect alignment
intern_const_alloc_recursive(ecx, intern_kind, &ret)?;
// we leave alignment checks off, since this `ecx` will not be used for further evaluation anyway

debug!("eval_body_using_ecx done: {:?}", *ret);
Ok(ret)
Expand Down
6 changes: 3 additions & 3 deletions compiler/rustc_const_eval/src/const_eval/machine.rs
Original file line number Diff line number Diff line change
Expand Up @@ -89,10 +89,10 @@ pub struct CompileTimeInterpreter<'mir, 'tcx> {
/// exhaustion error.
///
/// Setting this to `0` disables the limit and allows the interpreter to run forever.
pub steps_remaining: usize,
pub(super) steps_remaining: usize,

/// The virtual call stack.
pub(crate) stack: Vec<Frame<'mir, 'tcx, AllocId, ()>>,
pub(super) stack: Vec<Frame<'mir, 'tcx, AllocId, ()>>,

/// We need to make sure consts never point to anything mutable, even recursively. That is
/// relied on for pattern matching on consts with references.
Expand All @@ -103,7 +103,7 @@ pub struct CompileTimeInterpreter<'mir, 'tcx> {
pub(super) can_access_statics: bool,

/// Whether to check alignment during evaluation.
check_alignment: bool,
pub(super) check_alignment: bool,
}

impl<'mir, 'tcx> CompileTimeInterpreter<'mir, 'tcx> {
Expand Down
17 changes: 17 additions & 0 deletions src/test/ui/consts/extra-const-ub/issue-101034.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
// check-pass
// compile-flags: -Zextra-const-ub-checks

#[repr(packed)]
pub struct Foo {
bar: u8,
baa: [u32; 1],
}

const FOOMP: Foo = Foo {
bar: 0,
baa: [69; 1],
};

fn main() {
let _val = FOOMP;
}

0 comments on commit 5b80814

Please sign in to comment.