embassy-rs / embassy

Modern embedded framework, using Rust and async.
https://embassy.dev
Apache License 2.0
5.52k stars 768 forks source link

Support issue for target "riscv32imc-unknown-none-elf" #2256

Closed haijd closed 11 months ago

haijd commented 11 months ago

When I was developing for my ESP-C3 chip, I used the "embassy-executor" crate for task scheduling. I found that it uses "portable-atomic" for atomic support starting from version "0.3.3". Starting from this version, my project gets the following error when compiling:

error[E0433]: failed to resolve: could not find `AtomicU8` in `imp`
   --> /Users/root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/portable-atomic-1.5.1/src/lib.rs:659:14
    |
659 |         imp::AtomicU8::is_lock_free()
    |              ^^^^^^^^ could not find `AtomicU8` in `imp`
    |
help: a struct with a similar name exists
    |
659 |         imp::AtomicU128::is_lock_free()
    |              ~~~~~~~~~~
help: consider importing this struct
    |
472 + use core::sync::atomic::AtomicU8;
    |
help: if you import `AtomicU8`, refer to it directly
    |
659 -         imp::AtomicU8::is_lock_free()
659 +         AtomicU8::is_lock_free()
    |

error[E0433]: failed to resolve: could not find `AtomicU8` in `imp`
   --> /Users/root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/portable-atomic-1.5.1/src/lib.rs:681:14
    |
681 |         imp::AtomicU8::is_always_lock_free()
    |              ^^^^^^^^ could not find `AtomicU8` in `imp`
    |
help: a struct with a similar name exists
    |
681 |         imp::AtomicU128::is_always_lock_free()
    |              ~~~~~~~~~~
help: consider importing this struct
    |
472 + use core::sync::atomic::AtomicU8;
    |
help: if you import `AtomicU8`, refer to it directly
    |
681 -         imp::AtomicU8::is_always_lock_free()
681 +         AtomicU8::is_always_lock_free()
    |

error[E0412]: cannot find type `AtomicU8` in module `imp`
    --> /Users/root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/portable-atomic-1.5.1/src/lib.rs:1384:37
     |
1384 |     fn as_atomic_u8(&self) -> &imp::AtomicU8 {
     |                                     ^^^^^^^^
     |
    ::: /Users/root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/portable-atomic-1.5.1/src/imp/fallback/mod.rs:111:9
     |
111  |         pub(crate) struct $atomic_type {
     |         ------------------------------ similarly named struct `AtomicU128` defined here
     |
help: a struct with a similar name exists
     |
1384 |     fn as_atomic_u8(&self) -> &imp::AtomicU128 {
     |                                     ~~~~~~~~~~
help: consider importing this struct
     |
472  + use core::sync::atomic::AtomicU8;
     |
help: if you import `AtomicU8`, refer to it directly
     |
1384 -     fn as_atomic_u8(&self) -> &imp::AtomicU8 {
1384 +     fn as_atomic_u8(&self) -> &AtomicU8 {
     |

error[E0412]: cannot find type `AtomicU8` in module `imp`
    --> /Users/root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/portable-atomic-1.5.1/src/lib.rs:1387:56
     |
1387 |         unsafe { &*(self as *const Self as *const imp::AtomicU8) }
     |                                                        ^^^^^^^^
     |
    ::: /Users/root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/portable-atomic-1.5.1/src/imp/fallback/mod.rs:111:9
     |
111  |         pub(crate) struct $atomic_type {
     |         ------------------------------ similarly named struct `AtomicU128` defined here
     |
help: a struct with a similar name exists
     |
1387 |         unsafe { &*(self as *const Self as *const imp::AtomicU128) }
     |                                                        ~~~~~~~~~~
help: consider importing this struct
     |
472  + use core::sync::atomic::AtomicU8;
     |
help: if you import `AtomicU8`, refer to it directly
     |
1387 -         unsafe { &*(self as *const Self as *const imp::AtomicU8) }
1387 +         unsafe { &*(self as *const Self as *const AtomicU8) }
     |

error[E0412]: cannot find type `AtomicPtr` in module `imp`
    --> /Users/root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/portable-atomic-1.5.1/src/lib.rs:1409:17
     |
1409 |     inner: imp::AtomicPtr<T>,
     |                 ^^^^^^^^^
     |
    ::: /Users/root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/portable-atomic-1.5.1/src/imp/fallback/mod.rs:111:9
     |
111  |         pub(crate) struct $atomic_type {
     |         ------------------------------ similarly named struct `AtomicI64` defined here
     |
note: found an item that was configured out
    --> /Users/root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/portable-atomic-1.5.1/src/imp/mod.rs:269:60
     |
269  | pub(crate) use self::core_atomic::{AtomicI64, AtomicIsize, AtomicPtr, AtomicU64, AtomicUsize};
     |                                                            ^^^^^^^^^
help: a struct with a similar name exists
     |
1409 |     inner: imp::AtomicI64<T>,
     |                 ~~~~~~~~~
help: consider importing this struct
     |
472  + use core::sync::atomic::AtomicPtr;
     |
help: if you import `AtomicPtr`, refer to it directly
     |
1409 -     inner: imp::AtomicPtr<T>,
1409 +     inner: AtomicPtr<T>,
     |

error[E0433]: failed to resolve: could not find `AtomicPtr` in `imp`
    --> /Users/root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/portable-atomic-1.5.1/src/lib.rs:1464:28
     |
1464 |         Self { inner: imp::AtomicPtr::new(p) }
     |                            ^^^^^^^^^ could not find `AtomicPtr` in `imp`
     |
help: a struct with a similar name exists
     |
1464 |         Self { inner: imp::AtomicI64::new(p) }
     |                            ~~~~~~~~~
help: consider importing one of these items
     |
472  + use core::sync::atomic::AtomicPtr;
     |
472  + use crate::AtomicPtr;
     |
help: if you import `AtomicPtr`, refer to it directly
     |
1464 -         Self { inner: imp::AtomicPtr::new(p) }
1464 +         Self { inner: AtomicPtr::new(p) }
     |

error[E0412]: cannot find type `AtomicPtr` in module `imp`
    --> /Users/root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/portable-atomic-1.5.1/src/lib.rs:1516:15
     |
1516 |         <imp::AtomicPtr<T>>::is_lock_free()
     |               ^^^^^^^^^
     |
    ::: /Users/root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/portable-atomic-1.5.1/src/imp/fallback/mod.rs:111:9
     |
111  |         pub(crate) struct $atomic_type {
     |         ------------------------------ similarly named struct `AtomicI64` defined here
     |
note: found an item that was configured out
    --> /Users/root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/portable-atomic-1.5.1/src/imp/mod.rs:269:60
     |
269  | pub(crate) use self::core_atomic::{AtomicI64, AtomicIsize, AtomicPtr, AtomicU64, AtomicUsize};
     |                                                            ^^^^^^^^^
help: a struct with a similar name exists
     |
1516 |         <imp::AtomicI64<T>>::is_lock_free()
     |               ~~~~~~~~~
help: consider importing this struct
     |
472  + use core::sync::atomic::AtomicPtr;
     |
help: if you import `AtomicPtr`, refer to it directly
     |
1516 -         <imp::AtomicPtr<T>>::is_lock_free()
1516 +         <AtomicPtr<T>>::is_lock_free()
     |

error[E0412]: cannot find type `AtomicPtr` in module `imp`
    --> /Users/root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/portable-atomic-1.5.1/src/lib.rs:1538:15
     |
1538 |         <imp::AtomicPtr<T>>::is_always_lock_free()
     |               ^^^^^^^^^
     |
    ::: /Users/root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/portable-atomic-1.5.1/src/imp/fallback/mod.rs:111:9
     |
111  |         pub(crate) struct $atomic_type {
     |         ------------------------------ similarly named struct `AtomicI64` defined here
     |
note: found an item that was configured out
    --> /Users/root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/portable-atomic-1.5.1/src/imp/mod.rs:269:60
     |
269  | pub(crate) use self::core_atomic::{AtomicI64, AtomicIsize, AtomicPtr, AtomicU64, AtomicUsize};
     |                                                            ^^^^^^^^^
help: a struct with a similar name exists
     |
1538 |         <imp::AtomicI64<T>>::is_always_lock_free()
     |               ~~~~~~~~~
help: consider importing this struct
     |
472  + use core::sync::atomic::AtomicPtr;
     |
help: if you import `AtomicPtr`, refer to it directly
     |
1538 -         <imp::AtomicPtr<T>>::is_always_lock_free()
1538 +         <AtomicPtr<T>>::is_always_lock_free()
     |

error[E0412]: cannot find type `AtomicIsize` in module `imp`
    --> /Users/root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/portable-atomic-1.5.1/src/lib.rs:3953:17
     |
3953 |     atomic_int!(AtomicIsize, isize, 4);
     |                 ^^^^^^^^^^^ not found in `imp`
     |
note: found an item that was configured out
    --> /Users/root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/portable-atomic-1.5.1/src/imp/mod.rs:269:47
     |
269  | pub(crate) use self::core_atomic::{AtomicI64, AtomicIsize, AtomicPtr, AtomicU64, AtomicUsize};
     |                                               ^^^^^^^^^^^
help: consider importing this struct
     |
472  + use core::sync::atomic::AtomicIsize;
     |

error[E0433]: failed to resolve: could not find `AtomicIsize` in `imp`
    --> /Users/root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/portable-atomic-1.5.1/src/lib.rs:3953:17
     |
3953 |     atomic_int!(AtomicIsize, isize, 4);
     |                 ^^^^^^^^^^^ could not find `AtomicIsize` in `imp`
     |
help: consider importing one of these items
     |
472  + use core::sync::atomic::AtomicIsize;
     |
472  + use crate::AtomicIsize;
     |

error[E0412]: cannot find type `AtomicUsize` in module `imp`
    --> /Users/root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/portable-atomic-1.5.1/src/lib.rs:3955:17
     |
3955 |     atomic_int!(AtomicUsize, usize, 4);
     |                 ^^^^^^^^^^^ not found in `imp`
     |
note: found an item that was configured out
    --> /Users/root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/portable-atomic-1.5.1/src/imp/mod.rs:269:82
     |
269  | pub(crate) use self::core_atomic::{AtomicI64, AtomicIsize, AtomicPtr, AtomicU64, AtomicUsize};
     |                                                                                  ^^^^^^^^^^^
help: consider importing this struct
     |
472  + use core::sync::atomic::AtomicUsize;
     |

error[E0433]: failed to resolve: could not find `AtomicUsize` in `imp`
    --> /Users/root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/portable-atomic-1.5.1/src/lib.rs:3955:17
     |
3955 |     atomic_int!(AtomicUsize, usize, 4);
     |                 ^^^^^^^^^^^ could not find `AtomicUsize` in `imp`
     |
help: consider importing one of these items
     |
472  + use core::sync::atomic::AtomicUsize;
     |
472  + use crate::AtomicUsize;
     |

error[E0412]: cannot find type `AtomicI8` in module `imp`
    --> /Users/root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/portable-atomic-1.5.1/src/lib.rs:3967:17
     |
3967 |     atomic_int!(AtomicI8, i8, 1);
     |                 ^^^^^^^^
     |
    ::: /Users/root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/portable-atomic-1.5.1/src/imp/fallback/mod.rs:111:9
     |
111  |         pub(crate) struct $atomic_type {
     |         ------------------------------ similarly named struct `AtomicI128` defined here
     |
help: a struct with a similar name exists
     |
3967 |     atomic_int!(AtomicI128, i8, 1);
     |                 ~~~~~~~~~~
help: consider importing this struct
     |
472  + use core::sync::atomic::AtomicI8;
     |

error[E0433]: failed to resolve: could not find `AtomicI8` in `imp`
    --> /Users/root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/portable-atomic-1.5.1/src/lib.rs:3967:17
     |
3967 |     atomic_int!(AtomicI8, i8, 1);
     |                 ^^^^^^^^ could not find `AtomicI8` in `imp`
     |
help: a struct with a similar name exists
     |
3967 |     atomic_int!(AtomicI128, i8, 1);
     |                 ~~~~~~~~~~
help: consider importing one of these items
     |
472  + use core::sync::atomic::AtomicI8;
     |
472  + use crate::AtomicI8;
     |

error[E0412]: cannot find type `AtomicU8` in module `imp`
    --> /Users/root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/portable-atomic-1.5.1/src/lib.rs:3968:17
     |
3968 |     atomic_int!(AtomicU8, u8, 1);
     |                 ^^^^^^^^
     |
    ::: /Users/root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/portable-atomic-1.5.1/src/imp/fallback/mod.rs:111:9
     |
111  |         pub(crate) struct $atomic_type {
     |         ------------------------------ similarly named struct `AtomicU128` defined here
     |
help: a struct with a similar name exists
     |
3968 |     atomic_int!(AtomicU128, u8, 1);
     |                 ~~~~~~~~~~
help: consider importing this struct
     |
472  + use core::sync::atomic::AtomicU8;
     |

error[E0433]: failed to resolve: could not find `AtomicU8` in `imp`
    --> /Users/root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/portable-atomic-1.5.1/src/lib.rs:3968:17
     |
3968 |     atomic_int!(AtomicU8, u8, 1);
     |                 ^^^^^^^^ could not find `AtomicU8` in `imp`
     |
help: a struct with a similar name exists
     |
3968 |     atomic_int!(AtomicU128, u8, 1);
     |                 ~~~~~~~~~~
help: consider importing one of these items
     |
472  + use core::sync::atomic::AtomicU8;
     |
472  + use crate::AtomicU8;
     |

error[E0412]: cannot find type `AtomicI16` in module `imp`
    --> /Users/root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/portable-atomic-1.5.1/src/lib.rs:3971:17
     |
3971 |     atomic_int!(AtomicI16, i16, 2);
     |                 ^^^^^^^^^
     |
    ::: /Users/root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/portable-atomic-1.5.1/src/imp/fallback/mod.rs:111:9
     |
111  |         pub(crate) struct $atomic_type {
     |         ------------------------------ similarly named struct `AtomicI128` defined here
     |
help: a struct with a similar name exists
     |
3971 |     atomic_int!(AtomicI128, i16, 2);
     |                 ~~~~~~~~~~
help: consider importing this struct
     |
472  + use core::sync::atomic::AtomicI16;
     |

error[E0433]: failed to resolve: could not find `AtomicI16` in `imp`
    --> /Users/root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/portable-atomic-1.5.1/src/lib.rs:3971:17
     |
3971 |     atomic_int!(AtomicI16, i16, 2);
     |                 ^^^^^^^^^ could not find `AtomicI16` in `imp`
     |
help: a struct with a similar name exists
     |
3971 |     atomic_int!(AtomicI128, i16, 2);
     |                 ~~~~~~~~~~
help: consider importing one of these items
     |
472  + use core::sync::atomic::AtomicI16;
     |
472  + use crate::AtomicI16;
     |

error[E0412]: cannot find type `AtomicU16` in module `imp`
    --> /Users/root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/portable-atomic-1.5.1/src/lib.rs:3972:17
     |
3972 |     atomic_int!(AtomicU16, u16, 2);
     |                 ^^^^^^^^^
     |
    ::: /Users/root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/portable-atomic-1.5.1/src/imp/fallback/mod.rs:111:9
     |
111  |         pub(crate) struct $atomic_type {
     |         ------------------------------ similarly named struct `AtomicU128` defined here
     |
help: a struct with a similar name exists
     |
3972 |     atomic_int!(AtomicU128, u16, 2);
     |                 ~~~~~~~~~~
help: consider importing this struct
     |
472  + use core::sync::atomic::AtomicU16;
     |

error[E0433]: failed to resolve: could not find `AtomicU16` in `imp`
    --> /Users/root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/portable-atomic-1.5.1/src/lib.rs:3972:17
     |
3972 |     atomic_int!(AtomicU16, u16, 2);
     |                 ^^^^^^^^^ could not find `AtomicU16` in `imp`
     |
help: a struct with a similar name exists
     |
3972 |     atomic_int!(AtomicU128, u16, 2);
     |                 ~~~~~~~~~~
help: consider importing one of these items
     |
472  + use core::sync::atomic::AtomicU16;
     |
472  + use crate::AtomicU16;
     |

error[E0412]: cannot find type `AtomicI32` in module `imp`
    --> /Users/root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/portable-atomic-1.5.1/src/lib.rs:3975:17
     |
3975 |     atomic_int!(AtomicI32, i32, 4);
     |                 ^^^^^^^^^
     |
    ::: /Users/root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/portable-atomic-1.5.1/src/imp/fallback/mod.rs:111:9
     |
111  |         pub(crate) struct $atomic_type {
     |         ------------------------------ similarly named struct `AtomicI128` defined here
     |
help: a struct with a similar name exists
     |
3975 |     atomic_int!(AtomicI128, i32, 4);
     |                 ~~~~~~~~~~
help: consider importing this struct
     |
472  + use core::sync::atomic::AtomicI32;
     |

error[E0433]: failed to resolve: could not find `AtomicI32` in `imp`
    --> /Users/root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/portable-atomic-1.5.1/src/lib.rs:3975:17
     |
3975 |     atomic_int!(AtomicI32, i32, 4);
     |                 ^^^^^^^^^ could not find `AtomicI32` in `imp`
     |
help: a struct with a similar name exists
     |
3975 |     atomic_int!(AtomicI128, i32, 4);
     |                 ~~~~~~~~~~
help: consider importing one of these items
     |
472  + use core::sync::atomic::AtomicI32;
     |
472  + use crate::AtomicI32;
     |

error[E0412]: cannot find type `AtomicU32` in module `imp`
    --> /Users/root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/portable-atomic-1.5.1/src/lib.rs:2373:26
     |
2373 |         atomic_int!(int, AtomicU32, $int_type, $align);
     |                          ^^^^^^^^^
...
3976 |     atomic_int!(AtomicU32, u32, 4);
     |     ------------------------------ in this macro invocation
     |
    ::: /Users/root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/portable-atomic-1.5.1/src/imp/fallback/mod.rs:111:9
     |
111  |         pub(crate) struct $atomic_type {
     |         ------------------------------ similarly named struct `AtomicU128` defined here
     |
     = note: this error originates in the macro `atomic_int` (in Nightly builds, run with -Z macro-backtrace for more info)
help: a struct with a similar name exists
     |
2373 |         atomic_int!(int, AtomicU128, $int_type, $align);
     |                          ~~~~~~~~~~
help: consider importing this struct
     |
472  + use core::sync::atomic::AtomicU32;
     |

error[E0433]: failed to resolve: could not find `AtomicU32` in `imp`
    --> /Users/root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/portable-atomic-1.5.1/src/lib.rs:2373:26
     |
2373 |         atomic_int!(int, AtomicU32, $int_type, $align);
     |                          ^^^^^^^^^ could not find `AtomicU32` in `imp`
...
3976 |     atomic_int!(AtomicU32, u32, 4);
     |     ------------------------------ in this macro invocation
     |
     = note: this error originates in the macro `atomic_int` (in Nightly builds, run with -Z macro-backtrace for more info)
help: a struct with a similar name exists
     |
2373 |         atomic_int!(int, AtomicU128, $int_type, $align);
     |                          ~~~~~~~~~~
help: consider importing one of these items
     |
472  + use core::sync::atomic::AtomicU32;
     |
472  + use crate::AtomicU32;
     |

   Compiling rand_core v0.6.4
   Compiling linked_list_allocator v0.10.5
error[E0282]: type annotations needed
    --> /Users/root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/portable-atomic-1.5.1/src/lib.rs:1431:26
     |
1431 |         fmt::Debug::fmt(&self.load(Ordering::Relaxed), f)
     |                          ^^^^ cannot infer type for type parameter `T`

error[E0282]: type annotations needed
    --> /Users/root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/portable-atomic-1.5.1/src/lib.rs:1439:28
     |
1439 |         fmt::Pointer::fmt(&self.load(Ordering::Relaxed), f)
     |                            ^^^^ cannot infer type for type parameter `T`

error: constant expression depends on a generic parameter
    --> /Users/root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/portable-atomic-1.5.1/src/utils.rs:13:23
     |
13   |         let [] = [(); true as usize - $crate::utils::_assert_is_bool($cond) as usize];
     |                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
     |
    ::: /Users/root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/portable-atomic-1.5.1/src/lib.rs:1463:9
     |
1463 |         static_assert_layout!(AtomicPtr<()>, *mut ());
     |         --------------------------------------------- in this macro invocation
     |
     = note: this may fail depending on what value the parameter takes
     = note: this error originates in the macro `static_assert` which comes from the expansion of the macro `static_assert_layout` (in Nightly builds, run with -Z macro-backtrace for more info)

error: constant expression depends on a generic parameter
    --> /Users/root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/portable-atomic-1.5.1/src/utils.rs:13:18
     |
13   |         let [] = [(); true as usize - $crate::utils::_assert_is_bool($cond) as usize];
     |                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
     |
    ::: /Users/root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/portable-atomic-1.5.1/src/lib.rs:1463:9
     |
1463 |         static_assert_layout!(AtomicPtr<()>, *mut ());
     |         --------------------------------------------- in this macro invocation
     |
     = note: this may fail depending on what value the parameter takes
     = note: this error originates in the macro `static_assert` which comes from the expansion of the macro `static_assert_layout` (in Nightly builds, run with -Z macro-backtrace for more info)

error[E0308]: mismatched types
    --> /Users/root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/portable-atomic-1.5.1/src/utils.rs:13:13
     |
13   |         let [] = [(); true as usize - $crate::utils::_assert_is_bool($cond) as usize];
     |             ^^ expected `0`, found `true as usize - $crate::utils::_assert_is_bool($cond) as usize`
     |
    ::: /Users/root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/portable-atomic-1.5.1/src/lib.rs:1463:9
     |
1463 |         static_assert_layout!(AtomicPtr<()>, *mut ());
     |         --------------------------------------------- in this macro invocation
     |
     = note: expected array `[(); 0]`
                found array `[(); true as usize - $crate::utils::_assert_is_bool($cond) as usize]`
     = note: this error originates in the macro `static_assert` which comes from the expansion of the macro `static_assert_layout` (in Nightly builds, run with -Z macro-backtrace for more info)

error[E0282]: type annotations needed
    --> /Users/root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/portable-atomic-1.5.1/src/lib.rs:1974:13
     |
1974 |             self.as_atomic_usize().fetch_add(val, order) as *mut T
     |             ^^^^ cannot infer type for type parameter `T`

error[E0282]: type annotations needed
    --> /Users/root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/portable-atomic-1.5.1/src/lib.rs:2018:13
     |
2018 |             self.as_atomic_usize().fetch_sub(val, order) as *mut T
     |             ^^^^ cannot infer type for type parameter `T`

error[E0282]: type annotations needed
    --> /Users/root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/portable-atomic-1.5.1/src/lib.rs:2077:13
     |
2077 |             self.as_atomic_usize().fetch_or(val, order) as *mut T
     |             ^^^^ cannot infer type for type parameter `T`

error[E0282]: type annotations needed
    --> /Users/root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/portable-atomic-1.5.1/src/lib.rs:2134:13
     |
2134 |             self.as_atomic_usize().fetch_and(val, order) as *mut T
     |             ^^^^ cannot infer type for type parameter `T`

error[E0282]: type annotations needed
    --> /Users/root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/portable-atomic-1.5.1/src/lib.rs:2190:13
     |
2190 |             self.as_atomic_usize().fetch_xor(val, order) as *mut T
     |             ^^^^ cannot infer type for type parameter `T`

error[E0282]: type annotations needed
    --> /Users/root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/portable-atomic-1.5.1/src/lib.rs:2238:13
     |
2238 |             self.as_atomic_usize().bit_set(bit, order)
     |             ^^^^ cannot infer type for type parameter `T`

error[E0282]: type annotations needed
    --> /Users/root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/portable-atomic-1.5.1/src/lib.rs:2283:13
     |
2283 |             self.as_atomic_usize().bit_clear(bit, order)
     |             ^^^^ cannot infer type for type parameter `T`

error[E0282]: type annotations needed
    --> /Users/root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/portable-atomic-1.5.1/src/lib.rs:2328:13
     |
2328 |             self.as_atomic_usize().bit_toggle(bit, order)
     |             ^^^^ cannot infer type for type parameter `T`

error: constant expression depends on a generic parameter
    --> /Users/root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/portable-atomic-1.5.1/src/utils.rs:13:23
     |
13   |           let [] = [(); true as usize - $crate::utils::_assert_is_bool($cond) as usize];
     |                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
     |
    ::: /Users/root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/portable-atomic-1.5.1/src/lib.rs:2335:9
     |
2335 | /         static_assert!(
2336 | |             core::mem::size_of::<AtomicPtr<()>>() == core::mem::size_of::<AtomicUsize>()
2337 | |         );
     | |_________- in this macro invocation
     |
     = note: this may fail depending on what value the parameter takes
     = note: this error originates in the macro `static_assert` (in Nightly builds, run with -Z macro-backtrace for more info)

error: constant expression depends on a generic parameter
    --> /Users/root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/portable-atomic-1.5.1/src/utils.rs:13:18
     |
13   |           let [] = [(); true as usize - $crate::utils::_assert_is_bool($cond) as usize];
     |                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
     |
    ::: /Users/root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/portable-atomic-1.5.1/src/lib.rs:2335:9
     |
2335 | /         static_assert!(
2336 | |             core::mem::size_of::<AtomicPtr<()>>() == core::mem::size_of::<AtomicUsize>()
2337 | |         );
     | |_________- in this macro invocation
     |
     = note: this may fail depending on what value the parameter takes
     = note: this error originates in the macro `static_assert` (in Nightly builds, run with -Z macro-backtrace for more info)

error[E0308]: mismatched types
    --> /Users/root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/portable-atomic-1.5.1/src/utils.rs:13:13
     |
13   |           let [] = [(); true as usize - $crate::utils::_assert_is_bool($cond) as usize];
     |               ^^ expected `0`, found `true as usize - $crate::utils::_assert_is_bool($cond) as usize`
     |
    ::: /Users/root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/portable-atomic-1.5.1/src/lib.rs:2335:9
     |
2335 | /         static_assert!(
2336 | |             core::mem::size_of::<AtomicPtr<()>>() == core::mem::size_of::<AtomicUsize>()
2337 | |         );
     | |_________- in this macro invocation
     |
     = note: expected array `[(); 0]`
                found array `[(); true as usize - $crate::utils::_assert_is_bool($cond) as usize]`
     = note: this error originates in the macro `static_assert` (in Nightly builds, run with -Z macro-backtrace for more info)

error: constant expression depends on a generic parameter
    --> /Users/root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/portable-atomic-1.5.1/src/utils.rs:13:23
     |
13   |           let [] = [(); true as usize - $crate::utils::_assert_is_bool($cond) as usize];
     |                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
     |
    ::: /Users/root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/portable-atomic-1.5.1/src/lib.rs:2338:9
     |
2338 | /         static_assert!(
2339 | |             core::mem::align_of::<AtomicPtr<()>>() == core::mem::align_of::<AtomicUsize>()
2340 | |         );
     | |_________- in this macro invocation
     |
     = note: this may fail depending on what value the parameter takes
     = note: this error originates in the macro `static_assert` (in Nightly builds, run with -Z macro-backtrace for more info)

error: constant expression depends on a generic parameter
    --> /Users/root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/portable-atomic-1.5.1/src/utils.rs:13:18
     |
13   |           let [] = [(); true as usize - $crate::utils::_assert_is_bool($cond) as usize];
     |                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
     |
    ::: /Users/root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/portable-atomic-1.5.1/src/lib.rs:2338:9
     |
2338 | /         static_assert!(
2339 | |             core::mem::align_of::<AtomicPtr<()>>() == core::mem::align_of::<AtomicUsize>()
2340 | |         );
     | |_________- in this macro invocation
     |
     = note: this may fail depending on what value the parameter takes
     = note: this error originates in the macro `static_assert` (in Nightly builds, run with -Z macro-backtrace for more info)

error[E0308]: mismatched types
    --> /Users/root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/portable-atomic-1.5.1/src/utils.rs:13:13
     |
13   |           let [] = [(); true as usize - $crate::utils::_assert_is_bool($cond) as usize];
     |               ^^ expected `0`, found `true as usize - $crate::utils::_assert_is_bool($cond) as usize`
     |
    ::: /Users/root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/portable-atomic-1.5.1/src/lib.rs:2338:9
     |
2338 | /         static_assert!(
2339 | |             core::mem::align_of::<AtomicPtr<()>>() == core::mem::align_of::<AtomicUsize>()
2340 | |         );
     | |_________- in this macro invocation
     |
     = note: expected array `[(); 0]`
                found array `[(); true as usize - $crate::utils::_assert_is_bool($cond) as usize]`
     = note: this error originates in the macro `static_assert` (in Nightly builds, run with -Z macro-backtrace for more info)

error[E0308]: mismatched types
    --> /Users/root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/portable-atomic-1.5.1/src/utils.rs:13:13
     |
13   |         let [] = [(); true as usize - $crate::utils::_assert_is_bool($cond) as usize];
     |             ^^ expected `0`, found `true as usize - $crate::utils::_assert_is_bool($cond) as usize`
     |
    ::: /Users/root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/portable-atomic-1.5.1/src/lib.rs:3953:5
     |
3953 |     atomic_int!(AtomicIsize, isize, 4);
     |     ---------------------------------- in this macro invocation
     |
     = note: expected array `[(); 0]`
                found array `[(); true as usize - $crate::utils::_assert_is_bool($cond) as usize]`
     = note: this error originates in the macro `static_assert` which comes from the expansion of the macro `atomic_int` (in Nightly builds, run with -Z macro-backtrace for more info)

error[E0308]: mismatched types
    --> /Users/root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/portable-atomic-1.5.1/src/utils.rs:13:13
     |
13   |         let [] = [(); true as usize - $crate::utils::_assert_is_bool($cond) as usize];
     |             ^^ expected `0`, found `true as usize - $crate::utils::_assert_is_bool($cond) as usize`
     |
    ::: /Users/root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/portable-atomic-1.5.1/src/lib.rs:3955:5
     |
3955 |     atomic_int!(AtomicUsize, usize, 4);
     |     ---------------------------------- in this macro invocation
     |
     = note: expected array `[(); 0]`
                found array `[(); true as usize - $crate::utils::_assert_is_bool($cond) as usize]`
     = note: this error originates in the macro `static_assert` which comes from the expansion of the macro `atomic_int` (in Nightly builds, run with -Z macro-backtrace for more info)

error[E0308]: mismatched types
    --> /Users/root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/portable-atomic-1.5.1/src/utils.rs:13:13
     |
13   |         let [] = [(); true as usize - $crate::utils::_assert_is_bool($cond) as usize];
     |             ^^ expected `0`, found `true as usize - $crate::utils::_assert_is_bool($cond) as usize`
     |
    ::: /Users/root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/portable-atomic-1.5.1/src/lib.rs:3967:5
     |
3967 |     atomic_int!(AtomicI8, i8, 1);
     |     ---------------------------- in this macro invocation
     |
     = note: expected array `[(); 0]`
                found array `[(); true as usize - $crate::utils::_assert_is_bool($cond) as usize]`
     = note: this error originates in the macro `static_assert` which comes from the expansion of the macro `atomic_int` (in Nightly builds, run with -Z macro-backtrace for more info)

error[E0308]: mismatched types
    --> /Users/root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/portable-atomic-1.5.1/src/utils.rs:13:13
     |
13   |         let [] = [(); true as usize - $crate::utils::_assert_is_bool($cond) as usize];
     |             ^^ expected `0`, found `true as usize - $crate::utils::_assert_is_bool($cond) as usize`
     |
    ::: /Users/root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/portable-atomic-1.5.1/src/lib.rs:3968:5
     |
3968 |     atomic_int!(AtomicU8, u8, 1);
     |     ---------------------------- in this macro invocation
     |
     = note: expected array `[(); 0]`
                found array `[(); true as usize - $crate::utils::_assert_is_bool($cond) as usize]`
     = note: this error originates in the macro `static_assert` which comes from the expansion of the macro `atomic_int` (in Nightly builds, run with -Z macro-backtrace for more info)

error[E0308]: mismatched types
    --> /Users/root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/portable-atomic-1.5.1/src/utils.rs:13:13
     |
13   |         let [] = [(); true as usize - $crate::utils::_assert_is_bool($cond) as usize];
     |             ^^ expected `0`, found `true as usize - $crate::utils::_assert_is_bool($cond) as usize`
     |
    ::: /Users/root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/portable-atomic-1.5.1/src/lib.rs:3971:5
     |
3971 |     atomic_int!(AtomicI16, i16, 2);
     |     ------------------------------ in this macro invocation
     |
     = note: expected array `[(); 0]`
                found array `[(); true as usize - $crate::utils::_assert_is_bool($cond) as usize]`
     = note: this error originates in the macro `static_assert` which comes from the expansion of the macro `atomic_int` (in Nightly builds, run with -Z macro-backtrace for more info)

error[E0308]: mismatched types
    --> /Users/root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/portable-atomic-1.5.1/src/utils.rs:13:13
     |
13   |         let [] = [(); true as usize - $crate::utils::_assert_is_bool($cond) as usize];
     |             ^^ expected `0`, found `true as usize - $crate::utils::_assert_is_bool($cond) as usize`
     |
    ::: /Users/root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/portable-atomic-1.5.1/src/lib.rs:3972:5
     |
3972 |     atomic_int!(AtomicU16, u16, 2);
     |     ------------------------------ in this macro invocation
     |
     = note: expected array `[(); 0]`
                found array `[(); true as usize - $crate::utils::_assert_is_bool($cond) as usize]`
     = note: this error originates in the macro `static_assert` which comes from the expansion of the macro `atomic_int` (in Nightly builds, run with -Z macro-backtrace for more info)

error[E0308]: mismatched types
    --> /Users/root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/portable-atomic-1.5.1/src/utils.rs:13:13
     |
13   |         let [] = [(); true as usize - $crate::utils::_assert_is_bool($cond) as usize];
     |             ^^ expected `0`, found `true as usize - $crate::utils::_assert_is_bool($cond) as usize`
     |
    ::: /Users/root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/portable-atomic-1.5.1/src/lib.rs:3975:5
     |
3975 |     atomic_int!(AtomicI32, i32, 4);
     |     ------------------------------ in this macro invocation
     |
     = note: expected array `[(); 0]`
                found array `[(); true as usize - $crate::utils::_assert_is_bool($cond) as usize]`
     = note: this error originates in the macro `static_assert` which comes from the expansion of the macro `atomic_int` (in Nightly builds, run with -Z macro-backtrace for more info)

error[E0308]: mismatched types
    --> /Users/root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/portable-atomic-1.5.1/src/utils.rs:13:13
     |
13   |         let [] = [(); true as usize - $crate::utils::_assert_is_bool($cond) as usize];
     |             ^^ expected `0`, found `true as usize - $crate::utils::_assert_is_bool($cond) as usize`
     |
    ::: /Users/root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/portable-atomic-1.5.1/src/lib.rs:3976:5
     |
3976 |     atomic_int!(AtomicU32, u32, 4);
     |     ------------------------------ in this macro invocation
     |
     = note: expected array `[(); 0]`
                found array `[(); true as usize - $crate::utils::_assert_is_bool($cond) as usize]`
     = note: this error originates in the macro `static_assert` which comes from the expansion of the macro `atomic_int` (in Nightly builds, run with -Z macro-backtrace for more info)

Some errors have detailed explanations: E0282, E0308, E0412, E0433.
For more information about an error, try `rustc --explain E0282`.
error: could not compile `portable-atomic` (lib) due to 62 previous errors
warning: build failed, waiting for other jobs to finish...

My "rustflags" configuration is as follows:

rustflags = [
  "-C", "link-arg=-Tlinkall.x",

  # Required to obtain backtraces (e.g. when using the "esp-backtrace" crate.)
  # NOTE: May negatively impact performance of produced code
  "-C", "force-frame-pointers",

  # comment the cfgs below if you do _not_ wish to emulate atomics.
  # enable the atomic codegen option for RISCV
  "-C", "target-feature=+a",
  # tell the core library have atomics even though it's not specified in the target definition
  "--cfg", "target_has_atomic_load_store",
  "--cfg", 'target_has_atomic_load_store="8"',
  "--cfg", 'target_has_atomic_load_store="16"',
  "--cfg", 'target_has_atomic_load_store="32"',
  "--cfg", 'target_has_atomic_load_store="ptr"',
  # enable cas
  "--cfg", "target_has_atomic",
  "--cfg", 'target_has_atomic="8"',
  "--cfg", 'target_has_atomic="16"',
  "--cfg", 'target_has_atomic="32"',
  "--cfg", 'target_has_atomic="ptr"',
]

The compilation tool chain of the "nightly" channel is used.

taiki-e commented 11 months ago

See https://github.com/embassy-rs/static-cell/issues/10#issuecomment-1842037543.

haijd commented 11 months ago

"portable-atomic" has just fixed this problem in version 1.6.0, please update the dependencies.

Dirbaio commented 11 months ago

can you send a PR?