]> git.lizzy.rs Git - rust.git/commit
Auto merge of #90373 - tmiasko:union-qualification, r=oli-obk
authorbors <bors@rust-lang.org>
Fri, 29 Oct 2021 12:21:09 +0000 (12:21 +0000)
committerbors <bors@rust-lang.org>
Fri, 29 Oct 2021 12:21:09 +0000 (12:21 +0000)
commit9ed5b94b28e758996db395d472e0345d0ffe612d
tree1ad7db17a867c13471425e8578737298ad440099
parent37f70a0e1e04086aee7ae57fbefd6d4071953506
parent3f778f31b6b285d41973a36ee1f4a2291d5f6a03
Auto merge of #90373 - tmiasko:union-qualification, r=oli-obk

Use type based qualification for unions

Union field access is currently qualified based on the qualification of
a value previously assigned to the union. At the same time, every union
access transmutes the content of the union, which might result in a
different qualification.

For example, consider constants A and B as defined below, under the
current rules neither contains interior mutability, since a value used
in the initial assignment did not contain `UnsafeCell` constructor.

```rust
#![feature(untagged_unions)]

union U { i: u32, c: std::cell::Cell<u32> }
const A: U = U { i: 0 };
const B: std::cell::Cell<u32> = unsafe { U { i: 0 }.c };
```

To avoid the issue, the changes here propose to consider the content of
a union as opaque and use type based qualification for union types.

Fixes #90268.

`@rust-lang/wg-const-eval`
compiler/rustc_const_eval/src/transform/check_consts/resolver.rs