forked from rust-lang/rust
-
Notifications
You must be signed in to change notification settings - Fork 6
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
add test for ICE: failed to get layout for [type error] rust-lang#92979
Fixes rust-lang#92979
- Loading branch information
1 parent
6fe5555
commit a3c2d75
Showing
2 changed files
with
94 additions
and
0 deletions.
There are no files selected for viewing
78 changes: 78 additions & 0 deletions
78
tests/ui/layout/failed-to-get-layout-for-type-error-ice-92979.rs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,78 @@ | ||
// ICE: failed to get layout for [type error] | ||
// issue: rust-lang/rust#92979 | ||
|
||
use std::fs; | ||
use std::fs::File; | ||
use std::io::Read; | ||
use std::convert::TryInto; | ||
|
||
fn get_file_as_byte_vec(filename: &String) -> Vec<u8> { | ||
let mut f = File::open(&filename).expect("no file found"); | ||
let metadata = fs::metadata(&filename).expect("unable to read metadata"); | ||
let mut buffer = vec![0; metadata.len() as usize]; | ||
f.read(&mut buffer).expect("buffer overflow"); | ||
|
||
buffer | ||
} | ||
|
||
|
||
|
||
fn demo<T, const N: usize>(v: Vec<T>) -> [T; N] { | ||
v.try_into() | ||
.unwrap_or_else(|v: Vec<T>| panic!("Expected a Vec of length {} but it was {}", N, v.len())) | ||
} | ||
|
||
|
||
fn main() { | ||
|
||
// Specify filepath | ||
let file: &String = &String::from("SomeBinaryDataFileWith4ByteHeaders_f32s_and_u32s"); | ||
|
||
// Read file into a vector of bytes | ||
let file_data = get_file_as_byte_vec(file); | ||
|
||
// Print length of vector and first few values | ||
let length = file_data.len(); | ||
println!("The read function read {} bytes", length); | ||
println!("The first few bytes:"); | ||
for i in 0..20{ | ||
println!("{}", file_data[i]); | ||
} | ||
|
||
// Manually count just to make sure | ||
let mut n: u64 = 0; | ||
for data in file_data{ | ||
n += 1; | ||
} | ||
println!("We counted {} bytes", n); | ||
assert!(n as usize == length, "Manual counting does not equal len method"); | ||
|
||
// Simulation parameters | ||
const N: usize = 49627502; // Number of Particles | ||
const bs: f64 = 125.0; // Box Size | ||
const HEADER_INCREMENT: u64 = 4*1; | ||
|
||
// Initialize index and counter variables | ||
let (mut j, mut pos, mut vel, mut id, mut mass): (u64, u64, u64, u64, u64) = (0, 0, 0, 0, 0); | ||
|
||
// Unpack Position Data | ||
j += HEADER_INCREMENT; | ||
let mut position: Vec<f32> = Vec::new(); | ||
while position.len() < N*3 { | ||
|
||
let p: Vec<u8> = Vec::new(); | ||
for item in 0i8..4 { | ||
let item = item; | ||
p.push(file_data[j as usize]); | ||
j += 1; | ||
} | ||
&mut position[position.len()] = f32::from_be_bytes(demo(p)); | ||
//~^ ERROR invalid left-hand side of assignment | ||
} | ||
|
||
// Ensure position data is indeed position by checking values | ||
for p in position { | ||
assert!((p > 0.) & (p < 125.), "Not in box") | ||
} | ||
|
||
} |
16 changes: 16 additions & 0 deletions
16
tests/ui/layout/failed-to-get-layout-for-type-error-ice-92979.stderr
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
error[E0070]: invalid left-hand side of assignment | ||
--> $DIR/failed-to-get-layout-for-type-error-ice-92979.rs:69:39 | ||
| | ||
LL | &mut position[position.len()] = f32::from_be_bytes(demo(p)); | ||
| ----------------------------- ^ | ||
| | | ||
| cannot assign to this expression | ||
| | ||
help: consider dereferencing here to assign to the mutably borrowed value | ||
| | ||
LL | *&mut position[position.len()] = f32::from_be_bytes(demo(p)); | ||
| + | ||
|
||
error: aborting due to 1 previous error | ||
|
||
For more information about this error, try `rustc --explain E0070`. |