diff options
| author | Deadbeef <ent3rm4n@gmail.com> | 2021-07-07 11:52:40 +0800 |
|---|---|---|
| committer | Deadbeef <ent3rm4n@gmail.com> | 2021-07-10 20:54:48 +0800 |
| commit | 56d79adf3be666a4583ffeddd276de5c8b6ab32e (patch) | |
| tree | 8b0c31f3ff1a65caf4843a8b02bb844101bc4465 /compiler | |
| parent | d8d4cc3b98b78fae879b9540f237ad31268d6430 (diff) | |
| download | rust-56d79adf3be666a4583ffeddd276de5c8b6ab32e.tar.gz rust-56d79adf3be666a4583ffeddd276de5c8b6ab32e.zip | |
Skip check for calling functions in same trait
Diffstat (limited to 'compiler')
| -rw-r--r-- | compiler/rustc_mir/src/transform/check_consts/validation.rs | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/compiler/rustc_mir/src/transform/check_consts/validation.rs b/compiler/rustc_mir/src/transform/check_consts/validation.rs index 6216ff6656e..e6a4f08836a 100644 --- a/compiler/rustc_mir/src/transform/check_consts/validation.rs +++ b/compiler/rustc_mir/src/transform/check_consts/validation.rs @@ -885,9 +885,17 @@ impl Visitor<'tcx> for Validator<'mir, 'tcx> { return; } - if !tcx.is_const_fn_raw(callee) { - self.check_op(ops::FnCallNonConst); - return; + let caller_has_attr = tcx.has_attr(caller, sym::default_method_body_is_const); + let in_same_trait = match (tcx.trait_of_item(caller), tcx.trait_of_item(callee)) { + (Some(t1), Some(t2)) => t1 == t2, + _ => false + }; + + if !(caller_has_attr && in_same_trait) { + if !tcx.is_const_fn_raw(callee) { + self.check_op(ops::FnCallNonConst); + return; + } } // If the `const fn` we are trying to call is not const-stable, ensure that we have |
