From 3732b7acf1a9cbe8578f6612057d69b4b5e28e44 Mon Sep 17 00:00:00 2001 From: Wesley Wiser Date: Wed, 13 Nov 2019 20:37:33 -0500 Subject: [PATCH] [ConstProp] Avoid OOM crashes by not evaluating large Places Fixes #66397 --- src/librustc_mir/transform/const_prop.rs | 5 +++++ src/test/ui/consts/issue-66397.rs | 5 +++++ 2 files changed, 10 insertions(+) create mode 100644 src/test/ui/consts/issue-66397.rs diff --git a/src/librustc_mir/transform/const_prop.rs b/src/librustc_mir/transform/const_prop.rs index 979d109aa05..51d0ab7943c 100644 --- a/src/librustc_mir/transform/const_prop.rs +++ b/src/librustc_mir/transform/const_prop.rs @@ -458,6 +458,11 @@ impl<'mir, 'tcx> ConstPropagator<'mir, 'tcx> { ) -> Option<()> { let span = source_info.span; + // #66397: Don't try to eval into large places as that can cause an OOM + if place_layout.size >= Size::from_bytes(MAX_ALLOC_LIMIT) { + return None; + } + let overflow_check = self.tcx.sess.overflow_checks(); // Perform any special handling for specific Rvalue types. diff --git a/src/test/ui/consts/issue-66397.rs b/src/test/ui/consts/issue-66397.rs new file mode 100644 index 00000000000..0830c060e56 --- /dev/null +++ b/src/test/ui/consts/issue-66397.rs @@ -0,0 +1,5 @@ +// build-pass + +fn main() { + [0; 4 * 1024 * 1024 * 1024 * 1024]; +}