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]


Reply via email to