diff options
| author | Luca Versari <veluca93@gmail.com> | 2024-08-17 20:45:45 +0200 |
|---|---|---|
| committer | Luca Versari <veluca93@gmail.com> | 2024-08-18 00:07:41 +0200 |
| commit | 7fd62320feddcb3fa85a3ab25bc4c0ac55ddac7c (patch) | |
| tree | 348770cb8b66d9c7d6c8ee4ad1c083cde0947017 /tests | |
| parent | 426a60abc213b28a7c7198e475476b6e650d871f (diff) | |
| download | rust-7fd62320feddcb3fa85a3ab25bc4c0ac55ddac7c.tar.gz rust-7fd62320feddcb3fa85a3ab25bc4c0ac55ddac7c.zip | |
Fix order of normalization and recursion in const folding.
Fixes #126831. Without this patch, type normalization is not always idempotent, which leads to all sorts of bugs in places that assume that normalizing a normalized type does nothing.
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/ui/const-generics/const-ty-is-normalized.rs | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/tests/ui/const-generics/const-ty-is-normalized.rs b/tests/ui/const-generics/const-ty-is-normalized.rs new file mode 100644 index 00000000000..784145f735e --- /dev/null +++ b/tests/ui/const-generics/const-ty-is-normalized.rs @@ -0,0 +1,25 @@ +//@ compile-flags: -Cdebuginfo=2 --crate-type=lib +//@ build-pass +#![feature(adt_const_params)] + +const N_ISLANDS: usize = 4; + +pub type Matrix = [[usize; N_ISLANDS]; N_ISLANDS]; + +const EMPTY_MATRIX: Matrix = [[0; N_ISLANDS]; N_ISLANDS]; + +const fn to_matrix() -> Matrix { + EMPTY_MATRIX +} + +const BRIDGE_MATRIX: [[usize; N_ISLANDS]; N_ISLANDS] = to_matrix(); + +pub struct Walk<const CURRENT: usize, const REMAINING: Matrix> { + _p: (), +} + +impl Walk<0, BRIDGE_MATRIX> { + pub const fn new() -> Self { + Self { _p: () } + } +} |
