diff options
-rw-r--r-- | .cargo_vcs_info.json | 2 | ||||
-rw-r--r-- | .github/workflows/ci.yml | 86 | ||||
-rw-r--r-- | .travis.yml | 50 | ||||
-rw-r--r-- | Android.bp | 37 | ||||
-rw-r--r-- | Cargo.toml | 11 | ||||
-rw-r--r-- | Cargo.toml.orig | 2 | ||||
-rw-r--r-- | METADATA | 10 | ||||
-rw-r--r-- | README.md | 16 | ||||
-rw-r--r-- | TEST_MAPPING | 119 | ||||
-rw-r--r-- | cargo2android.json | 12 | ||||
-rwxr-xr-x[-rw-r--r--] | ci/miri.sh | 0 | ||||
-rw-r--r-- | patches/Android.bp.patch | 14 | ||||
-rw-r--r-- | src/lib.rs | 13 | ||||
-rw-r--r-- | src/offset_of.rs | 18 | ||||
-rw-r--r-- | src/span_of.rs | 3 |
15 files changed, 259 insertions, 134 deletions
diff --git a/.cargo_vcs_info.json b/.cargo_vcs_info.json index fcba615..b737620 100644 --- a/.cargo_vcs_info.json +++ b/.cargo_vcs_info.json @@ -1,5 +1,5 @@ { "git": { - "sha1": "9846cd17f381a5a9b478267ca5c684ab59346283" + "sha1": "01e2e42ef0d833682c27b0f40a2cc748d86b2dc3" } } diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..97fcf98 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,86 @@ +name: CI + +on: [push, pull_request] + +jobs: + test: + name: Test Suite + runs-on: ubuntu-latest + strategy: + matrix: + rust: + - stable + - beta + - nightly + steps: + - uses: actions/checkout@v2 + - uses: actions-rs/toolchain@v1 + with: + toolchain: ${{ matrix.rust }} + override: true + - name: Run cargo test + run: cargo test + + test-msrv: + name: Test Suite + runs-on: ubuntu-latest + strategy: + matrix: + rust: + - 1.19.0 # Oldest supported (first version with numeric fields in struct patterns) + - 1.20.0 # Oldest supported with tuple_ty + - 1.31.0 # Oldest supported with allow(clippy) + - 1.36.0 # Oldest supported with MaybeUninit + - 1.40.0 # Oldest supported with cfg(doctest) + - 1.51.0 # Oldest supported with ptr::addr_of! + - stable + - beta + - nightly + steps: + - uses: actions/checkout@v2 + - uses: actions-rs/toolchain@v1 + with: + toolchain: ${{ matrix.rust }} + override: true + - name: Run cargo test + # Exclude doctests here, as we don't want to clutter docs themselves + # with backwards compatibility workarounds. + run: cargo test --lib + + nightly: + name: Test Suite (nightly features) + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions-rs/toolchain@v1 + with: + toolchain: nightly + override: true + - name: Run cargo test + # `--lib` prevents doctests from being run. + # This is due to `unstable_const` requiring extra `feature(...)` directives + # which the doctests do not have. + run: cargo test --all-features --lib + + miri: + name: Test Suite (Miri) + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: Test with Miri + run: ci/miri.sh + + style: + name: lints and formatting + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions-rs/toolchain@v1 + with: + toolchain: 1.51.0 # pin a version for reproducible results + components: rustfmt + override: true + - name: Check warnings + run: RUSTFLAGS="-D warnings" cargo check --all-targets + - name: Check formatting + run: cargo fmt -- --check diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index d3c4d65..0000000 --- a/.travis.yml +++ /dev/null @@ -1,50 +0,0 @@ -sudo: false -language: rust -cache: - cargo: true -matrix: - include: - - name: miri - env: TRAVIS_MIRI_JOB # make sure the cache is not shared with other "nightly" jobs - rust: nightly - script: - - sh ci/miri.sh - - - rust: 1.19.0 # Oldest supported (first version with numeric fields in struct patterns) - - rust: 1.20.0 # Oldest supported with tuple_ty - - rust: 1.31.0 # Oldest supported with allow(clippy) - - rust: 1.36.0 # Oldest supported with MaybeUninit - - rust: 1.40.0 # Oldest supported with cfg(doctest) - - rust: 1.51.0 # Oldest supported with ptr::addr_of! - - rust: stable - - rust: beta - - rust: nightly - - - name: all-features - rust: nightly - script: - # `--lib` added to prevent doctests from being compiled. - # This is due to `unstable_const` requiring extra `feature(...)` directives - # which the doctests do not have. - - cargo test --verbose --all-features --lib - - - name: rustfmt - rust: 1.36.0 - install: - - rustup component add rustfmt - script: - - cargo fmt -- --check - - - name: deny-warnings - env: RUSTFLAGS="-D warnings" - rust: 1.33.0 # `stable`: Locking down for consistent behavior - script: - - cargo check --tests - -install: -- rustc -Vv -- cargo -V - -script: -- rm -rf target/debug/deps/*memoffset* # Avoid rustdoc problems -- cargo test --verbose @@ -22,6 +22,8 @@ rust_library { name: "libmemoffset", host_supported: true, crate_name: "memoffset", + cargo_env_compat: true, + cargo_pkg_version: "0.6.5", srcs: ["src/lib.rs"], edition: "2015", features: ["default"], @@ -34,16 +36,26 @@ rust_library { ], apex_available: [ "//apex_available:platform", + "com.android.bluetooth", + "com.android.compos", "com.android.virt", ], + vendor_available: true, + min_sdk_version: "29", } -rust_defaults { - name: "memoffset_defaults", +rust_test { + name: "memoffset_test_src_lib", + host_supported: true, crate_name: "memoffset", + cargo_env_compat: true, + cargo_pkg_version: "0.6.5", srcs: ["src/lib.rs"], test_suites: ["general-tests"], auto_gen_config: true, + test_options: { + unit_test: true, + }, edition: "2015", features: ["default"], cfgs: [ @@ -53,25 +65,4 @@ rust_defaults { "raw_ref_macros", "tuple_ty", ], - rustlibs: [ - // ANDROID: disable for now just to avoid another dependency. - //"libdoc_comment", - ], } - -rust_test_host { - name: "memoffset_host_test_src_lib", - defaults: ["memoffset_defaults"], - test_options: { - unit_test: true, - }, -} - -rust_test { - name: "memoffset_device_test_src_lib", - defaults: ["memoffset_defaults"], -} - -// dependent_library ["feature_list"] -// autocfg-1.0.1 -// doc-comment-0.3.3 @@ -3,16 +3,15 @@ # When uploading crates to the registry Cargo will automatically # "normalize" Cargo.toml files for maximal compatibility # with all versions of Cargo and also rewrite `path` dependencies -# to registry (e.g., crates.io) dependencies +# to registry (e.g., crates.io) dependencies. # -# If you believe there's an error in this file please file an -# issue against the rust-lang/cargo repository. If you're -# editing this file be aware that the upstream Cargo.toml -# will likely look very different (and much more reasonable) +# If you are reading this file be aware that the original Cargo.toml +# will likely look very different (and much more reasonable). +# See Cargo.toml.orig for the original contents. [package] name = "memoffset" -version = "0.6.3" +version = "0.6.5" authors = ["Gilad Naaman <gilad.naaman@gmail.com>"] description = "offset_of functionality for Rust structs." readme = "README.md" diff --git a/Cargo.toml.orig b/Cargo.toml.orig index 9299a64..7a62858 100644 --- a/Cargo.toml.orig +++ b/Cargo.toml.orig @@ -1,6 +1,6 @@ [package] name = "memoffset" -version = "0.6.3" +version = "0.6.5" authors = ["Gilad Naaman <gilad.naaman@gmail.com>"] description = "offset_of functionality for Rust structs." license = "MIT" @@ -7,13 +7,13 @@ third_party { } url { type: ARCHIVE - value: "https://static.crates.io/crates/memoffset/memoffset-0.6.3.crate" + value: "https://static.crates.io/crates/memoffset/memoffset-0.6.5.crate" } - version: "0.6.3" + version: "0.6.5" license_type: NOTICE last_upgrade_date { - year: 2021 - month: 4 - day: 8 + year: 2022 + month: 3 + day: 1 } } @@ -1,6 +1,6 @@ # memoffset # -[![](http://meritbadge.herokuapp.com/memoffset)](https://crates.io/crates/memoffset) +[![](https://img.shields.io/crates/v/memoffset.svg)](https://crates.io/crates/memoffset) C-Like `offset_of` functionality for Rust structs. @@ -21,17 +21,9 @@ memoffset = "0.6" These versions will compile fine with rustc versions greater or equal to 1.19. -Add the following lines at the top of your `main.rs` or `lib.rs` files. - -```rust,ignore -#[macro_use] -extern crate memoffset; -``` - ## Examples ## ```rust -#[macro_use] -extern crate memoffset; +use memoffset::{offset_of, span_of}; #[repr(C, packed)] struct Foo { @@ -69,7 +61,5 @@ features = ["unstable_const"] Your crate root: (`lib.rs`/`main.rs`) ```rust,ignore -#![feature(ptr_offset_from, const_ptr_offset_from, const_maybe_uninit_as_ptr, const_raw_ptr_deref)] +#![feature(const_ptr_offset_from, const_refs_to_cell)] ``` - -If you intend to use `offset_of!` inside a `const fn`, also add the `const_fn` compiler feature. diff --git a/TEST_MAPPING b/TEST_MAPPING index 71c00fc..83479e2 100644 --- a/TEST_MAPPING +++ b/TEST_MAPPING @@ -1,11 +1,126 @@ // Generated by update_crate_tests.py for tests that depend on this crate. { + "imports": [ + { + "path": "external/rust/crates/base64" + }, + { + "path": "external/rust/crates/crossbeam-deque" + }, + { + "path": "external/rust/crates/crossbeam-epoch" + }, + { + "path": "external/rust/crates/tinytemplate" + }, + { + "path": "external/rust/crates/tinyvec" + }, + { + "path": "external/rust/crates/tokio" + }, + { + "path": "external/rust/crates/unicode-xid" + } + ], "presubmit": [ { - "name": "crossbeam-epoch_device_test_src_lib" + "name": "ZipFuseTest" + }, + { + "name": "apkdmverity.test" + }, + { + "name": "authfs_device_test_src_lib" + }, + { + "name": "diced_open_dice_cbor_test" + }, + { + "name": "diced_sample_inputs_test" + }, + { + "name": "diced_test" + }, + { + "name": "diced_utils_test" + }, + { + "name": "diced_vendor_test" + }, + { + "name": "keystore2_crypto_test_rust" + }, + { + "name": "keystore2_selinux_concurrency_test" + }, + { + "name": "keystore2_test" + }, + { + "name": "keystore2_test_utils_test" + }, + { + "name": "legacykeystore_test" + }, + { + "name": "memoffset_test_src_lib" + }, + { + "name": "microdroid_manager_test" + }, + { + "name": "virtualizationservice_device_test" + } + ], + "presubmit-rust": [ + { + "name": "ZipFuseTest" + }, + { + "name": "apkdmverity.test" + }, + { + "name": "authfs_device_test_src_lib" + }, + { + "name": "diced_open_dice_cbor_test" + }, + { + "name": "diced_sample_inputs_test" + }, + { + "name": "diced_test" + }, + { + "name": "diced_utils_test" + }, + { + "name": "diced_vendor_test" + }, + { + "name": "keystore2_crypto_test_rust" + }, + { + "name": "keystore2_selinux_concurrency_test" + }, + { + "name": "keystore2_test" + }, + { + "name": "keystore2_test_utils_test" + }, + { + "name": "legacykeystore_test" + }, + { + "name": "memoffset_test_src_lib" + }, + { + "name": "microdroid_manager_test" }, { - "name": "memoffset_device_test_src_lib" + "name": "virtualizationservice_device_test" } ] } diff --git a/cargo2android.json b/cargo2android.json index 0f253f0..5654962 100644 --- a/cargo2android.json +++ b/cargo2android.json @@ -1,11 +1,17 @@ { "apex-available": [ "//apex_available:platform", + "com.android.bluetooth", + "com.android.compos", "com.android.virt" ], "dependencies": true, + "dependency-blocklist": [ + "doc_comment" + ], "device": true, - "patch": "patches/Android.bp.patch", + "min-sdk-version": "29", "run": true, - "tests": true -}
\ No newline at end of file + "tests": true, + "vendor-available": true +} diff --git a/ci/miri.sh b/ci/miri.sh index 5aea2ec..5aea2ec 100644..100755 --- a/ci/miri.sh +++ b/ci/miri.sh diff --git a/patches/Android.bp.patch b/patches/Android.bp.patch deleted file mode 100644 index 96c3e12..0000000 --- a/patches/Android.bp.patch +++ /dev/null @@ -1,14 +0,0 @@ -diff --git a/Android.bp b/Android.bp -index eb63f7c..efa8362 100644 ---- a/Android.bp -+++ b/Android.bp -@@ -48,7 +52,8 @@ rust_defaults { - "--cfg tuple_ty", - ], - rustlibs: [ -- "libdoc_comment", -+ // ANDROID: disable for now just to avoid another dependency. -+ //"libdoc_comment", - ], - } - @@ -24,8 +24,7 @@ //! //! ## Examples //! ``` -//! #[macro_use] -//! extern crate memoffset; +//! use memoffset::{offset_of, span_of}; //! //! #[repr(C, packed)] //! struct HelpMeIAmTrappedInAStructFactory { @@ -60,13 +59,7 @@ //#![no_std] #![cfg_attr( feature = "unstable_const", - feature( - ptr_offset_from, - const_fn, - const_ptr_offset_from, - const_maybe_uninit_as_ptr, - const_raw_ptr_deref, - ) + feature(const_ptr_offset_from, const_refs_to_cell) )] #[macro_use] @@ -77,7 +70,7 @@ extern crate doc_comment; #[cfg(doctest)] doctest!("../README.md"); -/// Hiden module for things the macros need to access. +/// Hidden module for things the macros need to access. #[doc(hidden)] pub mod __priv { #[doc(hidden)] diff --git a/src/offset_of.rs b/src/offset_of.rs index a363d30..8596e45 100644 --- a/src/offset_of.rs +++ b/src/offset_of.rs @@ -72,8 +72,7 @@ macro_rules! _memoffset_offset_from_unsafe { /// /// ## Examples /// ``` -/// #[macro_use] -/// extern crate memoffset; +/// use memoffset::offset_of; /// /// #[repr(C, packed)] /// struct Foo { @@ -103,8 +102,7 @@ macro_rules! offset_of { /// /// ## Examples /// ``` -/// #[macro_use] -/// extern crate memoffset; +/// use memoffset::offset_of_tuple; /// /// fn main() { /// assert!(offset_of_tuple!((u8, u32), 1) >= 0, "Tuples do not have a defined layout"); @@ -255,6 +253,18 @@ mod tests { #[cfg(feature = "unstable_const")] #[test] + fn const_offset_interior_mutable() { + #[repr(C)] + struct Foo { + a: u32, + b: core::cell::Cell<u32>, + } + + assert_eq!([0; offset_of!(Foo, b)].len(), 4); + } + + #[cfg(feature = "unstable_const")] + #[test] fn const_fn_offset() { const fn test_fn() -> usize { #[repr(C)] diff --git a/src/span_of.rs b/src/span_of.rs index 5fa11ae..a3663d5 100644 --- a/src/span_of.rs +++ b/src/span_of.rs @@ -59,8 +59,7 @@ macro_rules! _memoffset__compile_error { /// /// ## Examples /// ``` -/// #[macro_use] -/// extern crate memoffset; +/// use memoffset::span_of; /// /// #[repr(C)] /// struct Florp { |