Rust: mem::replace tidak benar-benar mengubah tujuan di Android

Dibuat pada 22 Mar 2018  ·  3Komentar  ·  Sumber: rust-lang/rust

Saya memiliki cabang Servo yang mogok saat dijalankan di Android karena penggunaan kunci mem::replace sebenarnya tidak menyebabkan tujuan mengubah nilai. Ketika saya menambahkan println!("{:?}", self.pending_line) sebelum dan sesudah mem::replace, di desktop nilainya diperbarui seperti yang diharapkan, tetapi di Android nilai aslinya tetap.

Ketika saya menggunakan salah satu dari berikut ini sebagai gantinya:

self.pending_line = Line::new(self.floats.writing_mode, &self.minimum_metrics);

atau

let mut new_line = Line::new(self.floats.writing_mode, &self.minimum_metrics);
mem::swap(&mut self.pending_line, &mut new_line);

kemudian self.pending diperbarui seperti yang diharapkan dan Servo tidak mogok di Android.

A-codegen A-simd C-bug O-android T-compiler

Komentar yang paling membantu

Berikut ini juga berfungsi:

        mem::replace(&mut self.pending_line,
                     Line::new(self.floats.writing_mode, &self.minimum_metrics));
        mem::replace(&mut self.pending_line,
                     Line::new(self.floats.writing_mode, &self.minimum_metrics));

(ya, melakukan operasi yang sama dua kali)

Semua 3 komentar

Berikut ini juga berfungsi:

        mem::replace(&mut self.pending_line,
                     Line::new(self.floats.writing_mode, &self.minimum_metrics));
        mem::replace(&mut self.pending_line,
                     Line::new(self.floats.writing_mode, &self.minimum_metrics));

(ya, melakukan operasi yang sama dua kali)

Hmm, sepertinya tipe itu cukup besar (https://github.com/jdm/servo/blob/layoutstuff/components/layout/inline.rs#L221-L245) jadi akan mengenai jalur simd di swap (https ://github.com/rust-lang/rust/blob/master/src/libcore/ptr.rs#L194-L227) yang saat ini dinonaktifkan di beberapa platform lain, jadi saya ingin tahu apakah bug itu ada di suatu tempat ...

Triase: Tidak yakin apakah ini masih menjadi masalah.

Kode SIMD libcore yang diperbarui:

https://github.com/rust-lang/rust/blob/8ce3f840ae9b735a66531996c32330f24b877cb0/src/libcore/ptr/mod.rs#L418 -L465

Apakah halaman ini membantu?
0 / 5 - 0 peringkat