diff options
| author | b-naber <bn263@gmx.de> | 2021-12-02 12:43:36 +0100 |
|---|---|---|
| committer | b-naber <bn263@gmx.de> | 2021-12-05 12:15:27 +0100 |
| commit | 8ff50fe2736d8d33e2c51105cbabf023eff93218 (patch) | |
| tree | df7559ca38485d6810674d89010a4083c1f17fcb | |
| parent | 95209252f534ccb5bd15766234a992f53737fccf (diff) | |
| download | rust-8ff50fe2736d8d33e2c51105cbabf023eff93218.tar.gz rust-8ff50fe2736d8d33e2c51105cbabf023eff93218.zip | |
skip reborrows during AbstractConst building
| -rw-r--r-- | compiler/rustc_trait_selection/src/traits/const_evaluatable.rs | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/compiler/rustc_trait_selection/src/traits/const_evaluatable.rs b/compiler/rustc_trait_selection/src/traits/const_evaluatable.rs index 8edb7069fc4..be094347712 100644 --- a/compiler/rustc_trait_selection/src/traits/const_evaluatable.rs +++ b/compiler/rustc_trait_selection/src/traits/const_evaluatable.rs @@ -399,13 +399,25 @@ impl<'a, 'tcx> AbstractConstBuilder<'a, 'tcx> { let arg = self.recurse_build(source)?; self.nodes.push(Node::Cast(abstract_const::CastKind::As, arg, node.ty)) } - + ExprKind::Borrow{ arg, ..} => { + let arg_node = &self.body.exprs[*arg]; + + // Skip reborrows for now until we allow Deref/Borrow/AddressOf + // expressions. + // FIXME(generic_const_exprs): Verify/explain why this is sound + if let ExprKind::Deref {arg} = arg_node.kind { + self.recurse_build(arg)? + } else { + self.maybe_supported_error( + node.span, + "borrowing is not supported in generic constants", + )? + } + } // FIXME(generic_const_exprs): We may want to support these. - ExprKind::AddressOf { .. } - | ExprKind::Borrow { .. } - | ExprKind::Deref { .. } => self.maybe_supported_error( + ExprKind::AddressOf { .. } | ExprKind::Deref {..}=> self.maybe_supported_error( node.span, - "dereferencing is not supported in generic constants", + "dereferencing or taking the address is not supported in generic constants", )?, ExprKind::Repeat { .. } | ExprKind::Array { .. } => self.maybe_supported_error( node.span, |
