-
Notifications
You must be signed in to change notification settings - Fork 116
Add support for anonymous nested statics #3953
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This isn't related to issue 3904. In codegen_alloc_pointer, the GlobalAlloc::from call returns GlobalAlloc::Memory, so we already codegened it as a constant allocation prior to this PR. But I thought it would be good to have a test that exercises this case explicitly, and that demonstrates the difference between this case and the nested statics case, so I added it in this PR.
tautschnig
approved these changes
Mar 21, 2025
remi-delmas-3000
approved these changes
Mar 21, 2025
Merged
via the queue into
model-checking:main
with commit Mar 22, 2025
2c972fb
24 of 25 checks passed
github-merge-queue bot
pushed a commit
that referenced
this pull request
Apr 4, 2025
Bump Kani version to 0.61.0. Github-generated release notes: ## What's Changed * Fix CHANGELOG of 0.60.0 by @qinheping in #3925 * Bump tests/perf/s2n-quic from `d88faa4` to `8670e83` by @dependabot in #3928 * Update toolchain to 2025-03-04 by @qinheping in #3927 * Install the right toolchain for HEAD and BASE checks in `verify-std-check.yml` by @remi-delmas-3000 in #3920 * Automatic cargo update to 2025-03-10 by @github-actions in #3926 * Automatic toolchain upgrade to nightly-2025-03-05 by @github-actions in #3929 * Upgrade toolchain to nightly-2025-03-07 by @tautschnig in #3931 * Upgrade toolchain to nightly-2025-03-12 by @tautschnig in #3933 * Automatic toolchain upgrade to nightly-2025-03-13 by @github-actions in #3934 * Update CBMC dependency to 6.5.0 by @tautschnig in #3936 * Automatic toolchain upgrade to nightly-2025-03-14 by @github-actions in #3937 * Automatic toolchain upgrade to nightly-2025-03-15 by @github-actions in #3938 * Automatic toolchain upgrade to nightly-2025-03-16 by @github-actions in #3939 * Automatic toolchain upgrade to nightly-2025-03-17 by @github-actions in #3940 * Automatic cargo update to 2025-03-17 by @github-actions in #3941 * Autoharness: Don't panic on `_` argument and add `_autoharness` suffix to GOTO files by @carolynzech in #3942 * Implement `f16` and `f128` cases in `codegen_float_type` by @carolynzech in #3943 * Support function implementations of known built-ins by @tautschnig in #3945 * Autoharness: metadata improvements and enable standard library application by @carolynzech in #3948 * Autoharness: `--list` option by @carolynzech in #3952 * Add support for anonymous nested statics by @carolynzech in #3953 * Automatic cargo update to 2025-03-24 by @github-actions in #3954 * Bump tests/perf/s2n-quic from `8670e83` to `324cf31` by @dependabot in #3955 * Document behavior of checked_size_of_raw and is_inbounds by @rajath-mk in #3956 * Upgrade toolchain to 2025-03-18 by @zhassan-aws in #3959 * Remove unstable-features from code formatting script by @zhassan-aws in #3962 * Remove CI job to update features/verify-rust-std by @tautschnig in #3963 * Make is_inbounds public by @rajath-mk in #3958 * Enable Kani to work with a stable toolchain by @zhassan-aws in #3964 * Automatic cargo update to 2025-03-31 by @github-actions in #3966 * Add support for struct field accessing in loop contracts by @thanhnguyen-aws in #3970 * Bump tests/perf/s2n-quic from `324cf31` to `d0aff82` by @dependabot in #3968 * Clarify `is_inbounds` docs by @carolynzech in #3974 * Upgrade toolchain to 2025-04-01 by @carolynzech in #3973 * Remove remaining `--enable-unstable` mentions by @carolynzech in #3978 * Clean up unused dependencies by @zhassan-aws in #3981 * Automatic toolchain upgrade to nightly-2025-04-02 by @github-actions in #3983 * Update dependencies per `cargo-outdated` by @carolynzech in #3982 * Fix `autoharness` termination test & print metadata in alphabetical order by @carolynzech in #3971 * Fix cargo invocations to only use `pkg_args` where appropriate by @carolynzech in #3984 **Full Changelog**: kani-0.60.0...kani-0.61.0 By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 and MIT licenses.
zhassan-aws
added a commit
that referenced
this pull request
Apr 23, 2025
rust-lang/rust#121644 added support for anonymous nested allocations to statics. This PR adds support for such statics to Kani. The idea is to treat an anonymous `GlobalAlloc::Static` the same as we would treat a `GlobalAlloc::Memory`, since an anonymous static is a nested memory allocation. To frame this change in terms of the tests: `pointer_to_const_alloc.rs` contains a test for the `GlobalAlloc::Memory` case, which we could already handle prior to this PR. The MIR looks like: ``` alloc3 (size: 4, align: 4) { 2a 00 00 00 │ *... } alloc1 (static: FOO, size: 16, align: 8) { ╾─────alloc3<imm>─────╼ 01 00 00 00 00 00 00 00 │ ╾──────╼........ } ``` meaning that `FOO` contains a pointer to the *immutable* allocation alloc3 (note the `alloc3<imm>`, imm standing for "immutable"). `anon_static.rs` tests the code introduced in this PR. The MIR from `example_1` looks almost identical: ``` alloc2 (static: FOO::{constant#0}, size: 4, align: 4) { 2a 00 00 00 │ *... } alloc1 (static: FOO, size: 16, align: 8) { ╾───────alloc2────────╼ 01 00 00 00 00 00 00 00 │ ╾──────╼........ } ``` Note, however, that `alloc2` is mutable, and is thus an anonymous nested static rather than a constant allocation. But we can just call `codegen_const_allocation` anyway, since it ends up checking if the allocation is indeed constant before declaring the global variable in the symbol table: https://github.com/model-checking/kani/blob/319040b8cd2cb72ec0603653fad7a8d934857d57/kani-compiler/src/codegen_cprover_gotoc/codegen/operand.rs#L556 Resolves #3904 By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 and MIT licenses.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
rust-lang/rust#121644 added support for anonymous nested allocations to statics. This PR adds support for such statics to Kani.
The idea is to treat an anonymous
GlobalAlloc::Static
the same as we would treat aGlobalAlloc::Memory
, since an anonymous static is a nested memory allocation. To frame this change in terms of the tests:pointer_to_const_alloc.rs
contains a test for theGlobalAlloc::Memory
case, which we could already handle prior to this PR. The MIR looks like:meaning that
FOO
contains a pointer to the immutable allocation alloc3 (note thealloc3<imm>
, imm standing for "immutable").anon_static.rs
tests the code introduced in this PR. The MIR fromexample_1
looks almost identical:Note, however, that
alloc2
is mutable, and is thus an anonymous nested static rather than a constant allocation.But we can just call
codegen_const_allocation
anyway, since it ends up checking if the allocation is indeed constant before declaring the global variable in the symbol table:kani/kani-compiler/src/codegen_cprover_gotoc/codegen/operand.rs
Line 556 in 319040b
Resolves #3904
By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 and MIT licenses.