Skip to content

Improve support of static initialization blocks and statically-reachable memory #389

Closed
@eupp

Description

@eupp

Currently, if a Lincheck test execution both:

  • reads some values from statically-reachable memory, and
  • modifies the content of the same memory during the test

it can lead to non-determinism error (the Lincheck would not be able to replay the execution trace, because the content of the static memory changed).

[Above by statically-reachable memory we mean any mutable state reachable from static variables.]

Note that during the test statically-reachable memory can be modified both by

  • static initialization blocks (<clinit>),
  • and the regular functions from the test.

Thus, in order to fix possible non-determinism errors, we need to track modifications performed by <clinit> blocks, save them into trace, and manually re-perform them during replay (in the same order as in the original execution).

Metadata

Metadata

Type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions