mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-22 23:04:33 +00:00
add test for ICE: failed to get layout for [type error] #92979
Fixes https://github.com/rust-lang/rust/issues/92979
This commit is contained in:
parent
6fe555549b
commit
a3c2d752bd
@ -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")
|
||||
}
|
||||
|
||||
}
|
@ -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`.
|
Loading…
Reference in New Issue
Block a user