Verification of C Programs using Annotations In the rapidlychanging modern world, computer programming and software engineering hold tremendous significance. Technology is neither good nor evil but in the right hands, they can provide powerful benefits to the society. Therefore, the need to write correct programs has become very crucial in the current world. The absolute correctness of a program can be proven by testing dynamically using welldefined test cases, but testing can never show the absence of errors and is largely impractical for programs with no bounded input range. Hence, proving a programu0027s correctness at compile time still remains a challenge. A more theoretical and feasible approach of checking the correctness of a program is by using logical reasoning and mathematical proofs. This paper delves into checking the correctness of a C program by converting the given C code to an equivalent code in Dafny, a staticprogram verifier created by Microsoft Research. Dafny was designed to provide a simple introduction to formal verification and it has been extensively used to verify some challenging algorithms.

Verification of Safety Functions Implemented in Rust  a Symbolic Execution based approach Symbolic execution allows us to observe and assert properties of program code executing under (partially) unknown inputs and state. In this work we present a case study demonstrating that safety functions implemented in the Rust programming language can be verified by an assertion based approach. To this end, we leverage on previous developments adopting LLVMKLEE for symbolic execution of Rust programs.In particular we show that reliability can be ensured by proven absence of undefined behavior and that safety properties (expressed as assertions) can be ensured for all reachable paths of the underlying implementation (under symbolic inputs). Moreover, the verification (besides stating assertions) is fully automatic and can be applied without any changes made to the implementation. While assertions have the advantage of being familiar to the mainstream programmer, they lack the expressiveness of dedicated logic developed for model checking. The paper also discusses complexity issues arising from pathstate explosion inherent to symbolic execution. The feasibility of the approach is demonstrated on a representative use case implementing a safety function (equality) from the PLCopen library. We obtain complete path (466) and state (8) coverage in under 2 seconds for the given example on an i77700 laptop computer.