about summary refs log tree commit diff
path: root/compiler/rustc_mir/src/transform
diff options
context:
space:
mode:
authorDeadbeef <ent3rm4n@gmail.com>2021-08-16 11:29:05 +0000
committerDeadbeef <ent3rm4n@gmail.com>2021-08-16 12:04:01 +0000
commitee85704c0434e8453ee7d1113012331387cb6ee0 (patch)
tree29322ce939ec9d3a707801f33450e115ab2e4695 /compiler/rustc_mir/src/transform
parent58d685ecb3d4711cf3d21af502ccf51e63ae289c (diff)
downloadrust-ee85704c0434e8453ee7d1113012331387cb6ee0.tar.gz
rust-ee85704c0434e8453ee7d1113012331387cb6ee0.zip
Skip assert ICE with default_method_body_is_const
functions marked with #[default_method_body_is_const] would
ICE when being const checked due to it not being a const function:
`tcx.is_const_fn_raw(did)` returns false. We should skip this assert
when it is marked with that attribute.
Diffstat (limited to 'compiler/rustc_mir/src/transform')
-rw-r--r--compiler/rustc_mir/src/transform/check_consts/mod.rs9
1 files changed, 8 insertions, 1 deletions
diff --git a/compiler/rustc_mir/src/transform/check_consts/mod.rs b/compiler/rustc_mir/src/transform/check_consts/mod.rs
index 7e22ed22db4..a5cb0f4e14b 100644
--- a/compiler/rustc_mir/src/transform/check_consts/mod.rs
+++ b/compiler/rustc_mir/src/transform/check_consts/mod.rs
@@ -9,7 +9,7 @@ use rustc_hir as hir;
 use rustc_hir::def_id::{DefId, LocalDefId};
 use rustc_middle::mir;
 use rustc_middle::ty::{self, TyCtxt};
-use rustc_span::Symbol;
+use rustc_span::{sym, Symbol};
 
 pub use self::qualifs::Qualif;
 
@@ -104,6 +104,13 @@ pub fn rustc_allow_const_fn_unstable(
 pub fn is_const_stable_const_fn(tcx: TyCtxt<'tcx>, def_id: DefId) -> bool {
     use attr::{ConstStability, Stability, StabilityLevel};
 
+    // A default body marked const is not const-stable because const
+    // trait fns currently cannot be const-stable. We shouldn't
+    // restrict default bodies to only call const-stable functions.
+    if tcx.has_attr(def_id, sym::default_method_body_is_const) {
+        return false;
+    }
+
     // Const-stability is only relevant for `const fn`.
     assert!(tcx.is_const_fn_raw(def_id));