Skip to content

Commit 2ab85e4

Browse files
committed
reword comment
1 parent 73ce868 commit 2ab85e4

File tree

1 file changed

+10
-7
lines changed
  • compiler/rustc_const_eval/src/interpret

1 file changed

+10
-7
lines changed

compiler/rustc_const_eval/src/interpret/intern.rs

+10-7
Original file line numberDiff line numberDiff line change
@@ -178,13 +178,16 @@ pub fn intern_const_alloc_recursive<
178178
// promoteds as immutable.
179179
found_bad_mutable_pointer = true;
180180
}
181-
// It is tempting to intern as immutable if `prov.immutable()`. However, there
182-
// might be multiple pointers to the same allocation, and if *at least one* of
183-
// them is mutable, the allocation must be interned mutably. We will intern the
184-
// allocation when we encounter the first pointer. Therefore we always intern
185-
// with `inner_mutability`, and furthermore we ensured above that if that is
186-
// "immutable", then there are *no* mutable pointers anywhere in the newly
187-
// interned memory.
181+
// We always intern with `inner_mutability`, and furthermore we ensured above that if
182+
// that is "immutable", then there are *no* mutable pointers anywhere in the newly
183+
// interned memory -- justifying that we can indeed intern immutably. However this also
184+
// means we can *not* easily intern immutably here if `prov.immutable()` is true and
185+
// `inner_mutability` is `Mut`: there might be other pointers to that allocation, and
186+
// we'd have to somehow check that they are *all* immutable before deciding that this
187+
// allocation can be made immutable. In the future we could consider analyzing all
188+
// pointers before deciding which allocations can be made immutable; but for now we are
189+
// okay with losing some potential for immutability here. This can anyway only affect
190+
// `static mut`.
188191
todo.push((alloc_id, inner_mutability));
189192
})
190193
.map_err(|()| {

0 commit comments

Comments
 (0)