alamb opened a new issue #580:
URL: https://github.com/apache/arrow-rs/issues/580
**Describe the bug**
The test array::ffi::tests::test_struct signals a MIRI failure
**To Reproduce**
```shell
export MIRIFLAGS="-Zmiri-disable-isolation"
cargo +nightly miri setup
cargo +nightly miri test -p arrow -- --skip csv --skip ipc --skip json
test_struct
```
The test fails with
```
error: Undefined Behavior: trying to reborrow for SharedReadOnly at
alloc14433597, but parent tag <39379552> does not have an appropriate item in
the borrow stack
--> arrow/src/ffi.rs:141:22
|
141 | for child in private_data.children.iter() {
| ^^^^^^^^^^^^^^^^^^^^^ trying to reborrow for
SharedReadOnly at alloc14433597, but parent tag <39379552> does not have an
appropriate item in the borrow stack
|
= help: this indicates a potential bug in the program: it performed an
invalid operation, but the rules it violated are still experimental
= help: see
https://github.com/rust-lang/unsafe-code-guidelines/blob/master/wip/stacked-borrows.md
for further information
= note: inside `ffi::release_schema` at arrow/src/ffi.rs:141:22
note: inside `<ffi::FFI_ArrowSchema as std::ops::Drop>::drop` at
arrow/src/ffi.rs:238:39
--> arrow/src/ffi.rs:238:39
|
238 | Some(release) => unsafe { release(self) },
| ^^^^^^^^^^^^^
= note: inside `std::ptr::drop_in_place::<ffi::FFI_ArrowSchema> -
shim(Some(ffi::FFI_ArrowSchema))` at
/usr/share/rust/.rustup/toolchains/nightly-2021-07-04-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/ptr/mod.rs:192:1
= note: inside `std::sync::Arc::<ffi::FFI_ArrowSchema>::drop_slow` at
/usr/share/rust/.rustup/toolchains/nightly-2021-07-04-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/alloc/src/sync.rs:1055:18
= note: inside `<std::sync::Arc<ffi::FFI_ArrowSchema> as
std::ops::Drop>::drop` at
/usr/share/rust/.rustup/toolchains/nightly-2021-07-04-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/alloc/src/sync.rs:1597:13
= note: inside
`std::ptr::drop_in_place::<std::sync::Arc<ffi::FFI_ArrowSchema>> -
shim(Some(std::sync::Arc<ffi::FFI_ArrowSchema>))` at
/usr/share/rust/.rustup/toolchains/nightly-2021-07-04-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/ptr/mod.rs:192:1
= note: inside `std::ptr::drop_in_place::<ffi::ArrowArray> -
shim(Some(ffi::ArrowArray))` at
/usr/share/rust/.rustup/toolchains/nightly-2021-07-04-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/ptr/mod.rs:192:1
note: inside `array::ffi::<impl std::convert::TryFrom<ffi::ArrowArray> for
array::data::ArrayData>::try_from` at arrow/src/array/ffi.rs:35:5
--> arrow/src/array/ffi.rs:35:5
|
35 | }
| ^
note: inside `array::ffi::tests::test_round_trip` at
arrow/src/array/ffi.rs:71:23
--> arrow/src/array/ffi.rs:71:23
|
71 | let result = &ArrayData::try_from(d1)?;
| ^^^^^^^^^^^^^^^^^^^^^^^
note: inside `array::ffi::tests::test_struct` at arrow/src/array/ffi.rs:128:9
--> arrow/src/array/ffi.rs:128:9
|
128 | test_round_trip(data)
| ^^^^^^^^^^^^^^^^^^^^^
note: inside closure at arrow/src/array/ffi.rs:99:5
--> arrow/src/array/ffi.rs:99:5
|
99 | / fn test_struct() -> Result<()> {
100 | | let inner = StructArray::from(vec![
101 | | (
102 | | Field::new("a1", DataType::Boolean, false),
... |
128 | | test_round_trip(data)
129 | | }
| |_____^
= note: inside `<[closure@arrow/src/array/ffi.rs:99:5: 129:6] as
std::ops::FnOnce<()>>::call_once - shim` at
/usr/share/rust/.rustup/toolchains/nightly-2021-07-04-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/ops/function.rs:227:5
= note: inside `<fn() as std::ops::FnOnce<()>>::call_once - shim(fn())`
at
/usr/share/rust/.rustup/toolchains/nightly-2021-07-04-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/ops/function.rs:227:5
= note: inside `test::__rust_begin_short_backtrace::<fn()>` at
/usr/share/rust/.rustup/toolchains/nightly-2021-07-04-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/test/src/lib.rs:577:5
= note: inside closure at
/usr/share/rust/.rustup/toolchains/nightly-2021-07-04-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/test/src/lib.rs:568:30
= note: inside `<[closure@test::run_test::{closure#2}] as
std::ops::FnOnce<()>>::call_once - shim(vtable)` at
/usr/share/rust/.rustup/toolchains/nightly-2021-07-04-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/ops/function.rs:227:5
= note: inside `<std::boxed::Box<dyn std::ops::FnOnce() +
std::marker::Send> as std::ops::FnOnce<()>>::call_once` at
/usr/share/rust/.rustup/toolchains/nightly-2021-07-04-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/alloc/src/boxed.rs:1575:9
= note: inside `<std::panic::AssertUnwindSafe<std::boxed::Box<dyn
std::ops::FnOnce() + std::marker::Send>> as std::ops::FnOnce<()>>::call_once`
at
/usr/share/rust/.rustup/toolchains/nightly-2021-07-04-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/panic.rs:347:9
= note: inside
`std::panicking::r#try::do_call::<std::panic::AssertUnwindSafe<std::boxed::Box<dyn
std::ops::FnOnce() + std::marker::Send>>, ()>` at
/usr/share/rust/.rustup/toolchains/nightly-2021-07-04-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/panicking.rs:401:40
= note: inside `std::panicking::r#try::<(),
std::panic::AssertUnwindSafe<std::boxed::Box<dyn std::ops::FnOnce() +
std::marker::Send>>>` at
/usr/share/rust/.rustup/toolchains/nightly-2021-07-04-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/panicking.rs:365:19
= note: inside
`std::panic::catch_unwind::<std::panic::AssertUnwindSafe<std::boxed::Box<dyn
std::ops::FnOnce() + std::marker::Send>>, ()>` at
/usr/share/rust/.rustup/toolchains/nightly-2021-07-04-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/panic.rs:434:14
= note: inside `test::run_test_in_process` at
/usr/share/rust/.rustup/toolchains/nightly-2021-07-04-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/test/src/lib.rs:600:18
= note: inside closure at
/usr/share/rust/.rustup/toolchains/nightly-2021-07-04-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/test/src/lib.rs:492:39
= note: inside `test::run_test::run_test_inner` at
/usr/share/rust/.rustup/toolchains/nightly-2021-07-04-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/test/src/lib.rs:530:13
= note: inside `test::run_test` at
/usr/share/rust/.rustup/toolchains/nightly-2021-07-04-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/test/src/lib.rs:564:28
= note: inside
`test::run_tests::<[closure@test::run_tests_console::{closure#2}]>` at
/usr/share/rust/.rustup/toolchains/nightly-2021-07-04-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/test/src/lib.rs:305:17
= note: inside `test::run_tests_console` at
/usr/share/rust/.rustup/toolchains/nightly-2021-07-04-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/test/src/console.rs:290:5
= note: inside `test::test_main` at
/usr/share/rust/.rustup/toolchains/nightly-2021-07-04-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/test/src/lib.rs:122:15
= note: inside `test::test_main_static` at
/usr/share/rust/.rustup/toolchains/nightly-2021-07-04-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/test/src/lib.rs:141:5
= note: inside `main`
= note: inside `<fn() as std::ops::FnOnce<()>>::call_once - shim(fn())`
at
/usr/share/rust/.rustup/toolchains/nightly-2021-07-04-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/ops/function.rs:227:5
= note: inside
`std::sys_common::backtrace::__rust_begin_short_backtrace::<fn(), ()>` at
/usr/share/rust/.rustup/toolchains/nightly-2021-07-04-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/sys_common/backtrace.rs:125:18
= note: inside closure at
/usr/share/rust/.rustup/toolchains/nightly-2021-07-04-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/rt.rs:63:18
= note: inside `std::ops::function::impls::<impl std::ops::FnOnce<()>
for &dyn std::ops::Fn() -> i32 + std::marker::Sync +
std::panic::RefUnwindSafe>::call_once` at
/usr/share/rust/.rustup/toolchains/nightly-2021-07-04-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/ops/function.rs:259:13
= note: inside `std::panicking::r#try::do_call::<&dyn std::ops::Fn() ->
i32 + std::marker::Sync + std::panic::RefUnwindSafe, i32>` at
/usr/share/rust/.rustup/toolchains/nightly-2021-07-04-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/panicking.rs:401:40
= note: inside `std::panicking::r#try::<i32, &dyn std::ops::Fn() -> i32
+ std::marker::Sync + std::panic::RefUnwindSafe>` at
/usr/share/rust/.rustup/toolchains/nightly-2021-07-04-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/panicking.rs:365:19
= note: inside `std::panic::catch_unwind::<&dyn std::ops::Fn() -> i32 +
std::marker::Sync + std::panic::RefUnwindSafe, i32>` at
/usr/share/rust/.rustup/toolchains/nightly-2021-07-04-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/panic.rs:434:14
= note: inside closure at
/usr/share/rust/.rustup/toolchains/nightly-2021-07-04-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/rt.rs:45:48
= note: inside
`std::panicking::r#try::do_call::<[closure@std::rt::lang_start_internal::{closure#2}],
isize>` at
/usr/share/rust/.rustup/toolchains/nightly-2021-07-04-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/panicking.rs:401:40
= note: inside `std::panicking::r#try::<isize,
[closure@std::rt::lang_start_internal::{closure#2}]>` at
/usr/share/rust/.rustup/toolchains/nightly-2021-07-04-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/panicking.rs:365:19
= note: inside
`std::panic::catch_unwind::<[closure@std::rt::lang_start_internal::{closure#2}],
isize>` at
/usr/share/rust/.rustup/toolchains/nightly-2021-07-04-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/panic.rs:434:14
= note: inside `std::rt::lang_start_internal` at
/usr/share/rust/.rustup/toolchains/nightly-2021-07-04-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/rt.rs:45:20
= note: inside `std::rt::lang_start::<()>` at
/usr/share/rust/.rustup/toolchains/nightly-2021-07-04-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/rt.rs:62:5
= note: this error originates in the attribute macro `test` (in Nightly
builds, run with -Z macro-backtrace for more info)
error: aborting due to previous error; 1 warning emitted
```
**Expected behavior**
The test should pass without any issues
**Additional context**
Add any other context about the problem here.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]