Skip to content

Conversation

lucasccordeiro
Copy link
Contributor

@lucasccordeiro lucasccordeiro commented Mar 22, 2025

The master version fails as:

Downloading Mathsat
-- Downloading MATHSAT from https://mathsat.fbk.eu/download.php?file=mathsat-5.6.10-linux-x86_64.tar.gz
-- Extracting MATHSAT
CMake Error at src/solvers/mathsat/CMakeLists.txt:20 (message):
  Could not find mathsat include headers, please check Mathsat_DIR

This PR adds the new download link MathSAT: for https://mathsat.fbk.eu/release/mathsat-5.6.11-linux-x86_64.tar.gz.

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
@lucasccordeiro lucasccordeiro merged commit 32b92cc into master Mar 22, 2025
13 checks passed
@lucasccordeiro lucasccordeiro deleted the update-mathsat branch March 22, 2025 17:21
ChenfengWei0 pushed a commit that referenced this pull request Apr 4, 2025
The master version fails as:

````
Downloading Mathsat
-- Downloading MATHSAT from https://mathsat.fbk.eu/download.php?file=mathsat-5.6.10-linux-x86_64.tar.gz
-- Extracting MATHSAT
CMake Error at src/solvers/mathsat/CMakeLists.txt:20 (message):
  Could not find mathsat include headers, please check Mathsat_DIR
````

This PR adds the new download link MathSAT: for
https://mathsat.fbk.eu/release/mathsat-5.6.11-linux-x86_64.tar.gz.

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
mihaistate pushed a commit that referenced this pull request Jun 24, 2025
The master version fails as:

````
Downloading Mathsat
-- Downloading MATHSAT from https://mathsat.fbk.eu/download.php?file=mathsat-5.6.10-linux-x86_64.tar.gz
-- Extracting MATHSAT
CMake Error at src/solvers/mathsat/CMakeLists.txt:20 (message):
  Could not find mathsat include headers, please check Mathsat_DIR
````

This PR adds the new download link MathSAT: for
https://mathsat.fbk.eu/release/mathsat-5.6.11-linux-x86_64.tar.gz.

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
mihaistate pushed a commit that referenced this pull request Jun 27, 2025
[OM] Overlapping memory check

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] Added test case to check for overlapping memory

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] Added test to check for NULL in memcpy

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[OM] Check for src and dest NULL

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] detected NULL source pointer

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[OM] return dst if n=0 (nothing to copy)

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] check for memcpy output

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

Apply automatic changes

[TC] add variant of github_60 test (#2362)

Make TC from #1175 compatible with windows (#2361)

[TC] add TC from #1290 (#2359)

Update README.md

Update README.md

[Z3] Support bitwise for integer arithmetic (#2354)

This PR refactors our bitwise operations handling and enhances our SMT
conversion functions to better support integer and boolean types. In
particular, it introduces more consistent handling for boolean and
integer types and improves compatibility with the Z3 solver's bit-vector
operations.
- [X] bitnot_id
- [X] bitxor_id
- [x] bitand_id
- [x] bitor_id
- [x] bitnand_id
- [x] bitnor_id
- [x] bitnxor_id

This PR (30s):

````
Statistics:          33569 Files
  correct:           18073
    correct true:    10743
    correct false:    7330
  incorrect:            40
    incorrect true:     13
    incorrect false:    27
  unknown:           15456
  Score:             27968 (max: 55885)

https://github.com/esbmc/esbmc/actions/runs/13956944037
````

Master (30s):

````
Statistics:          33569 Files
  correct:           18075
    correct true:    10743
    correct false:    7332
  incorrect:            40
    incorrect true:     13
    incorrect false:    27
  unknown:           15454
  Score:             27970 (max: 55885)

https://github.com/esbmc/esbmc/actions/runs/13906715936
````

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>

Update README.md

Update README.md

[C verification] remove nonexistent function (#2358)

Fixes #2355.

nand() doesn't actually exist in the standard C library; the <math.h>
header only defines nan(), nanf(), and nanl().

We introduced a new function : -)

Update README.md

Update stats-600s.txt

[cmake] update MathSAT download link (#2370)

The master version fails as:

````
Downloading Mathsat
-- Downloading MATHSAT from https://mathsat.fbk.eu/download.php?file=mathsat-5.6.10-linux-x86_64.tar.gz
-- Extracting MATHSAT
CMake Error at src/solvers/mathsat/CMakeLists.txt:20 (message):
  Could not find mathsat include headers, please check Mathsat_DIR
````

This PR adds the new download link MathSAT: for
https://mathsat.fbk.eu/release/mathsat-5.6.11-linux-x86_64.tar.gz.

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

Update README.md

[Overflow] Added overflow_cast to support integer overflow detection (#2367)

Fixes #2357.

This PR extends the `overflow_cast` method in ESBMC to handle integer
arithmetic typecast overflow detection.

Key Changes:
- Checks for signed and unsigned typecast overflow in integer
arithmetic.
- Handles cases where values exceed the target type’s range

This PR (30s):

````
Statistics:          33569 Files
  correct:           18079
    correct true:    10747
    correct false:    7332
  incorrect:            40
    incorrect true:     13
    incorrect false:    27
  unknown:           15450
  Score:             27978 (max: 55885)

https://github.com/esbmc/esbmc/actions/runs/14016741212
````

Master (30s):

````
Statistics:          33569 Files
  correct:           18075
    correct true:    10743
    correct false:    7332
  incorrect:            40
    incorrect true:     13
    incorrect false:    27
  unknown:           15454
  Score:             27970 (max: 55885)

https://github.com/esbmc/esbmc/actions/runs/13906715936
````

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>

Update stats-30s.txt

[memory-leak] Track global memory (#2372)

This PR fixes #2335.

Here, 'g' acts as a guard condition, determining whether 'e' should be
considered. 'same_object2tc(obj, e)' checks if 'obj' and 'e' refer to
the same object; if 'g' is an AND condition (is_and2t) or already a
same-object check (is_same_object2t), then 'g' is combined; otherwise,
we directly use 'same_object2tc(obj, e).'

This PR (30s):

````
Statistics:          33569 Files
  correct:           18077
    correct true:    10751
    correct false:    7326
  incorrect:            36
    incorrect true:     13
    incorrect false:    23
  unknown:           15456
  Score:             28044 (max: 55885)

https://github.com/esbmc/esbmc/actions/runs/14046421617
````

Master (30s):

````
Statistics:          33569 Files
  correct:           18079
    correct true:    10747
    correct false:    7332
  incorrect:            40
    incorrect true:     13
    incorrect false:    27
  unknown:           15450
  Score:             27978 (max: 55885)

https://github.com/esbmc/esbmc/actions/runs/14016741212
````

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>

Update stats-30s.txt

Update stats-300s.txt

[overflow] check typecast overflow for signed and unsigned int only (#2376)

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[overflow] use resolved_type instead

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

Update stats-300s.txt

[Solidity] fix address modelling (#2379)

[OM] Refactoring our C++ operational models: functional (#2381)

[python-frontend] Model for numpy.ceil (#2382)

- Add operational model for
[numpy.ceil](https://numpy.org/doc/stable/reference/generated/numpy.ceil.html#numpy.ceil).
- Fix handling of negative numbers in lists.

---------

Co-authored-by: brcfarias <1334363+brcfarias@users.noreply.github.com>

[Z3] Fix overflow detection for signed subtraction and unsigned division and modulus (#2383)

Update README.md

[overflow] removed unused variable

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

Update stats-30s.txt

[sv-comp] increase context-switch to 3 (#2378)

This PR (900s):

````
Statistics:           3179 Files
  correct:            1814
    correct true:     1360
    correct false:     454
  incorrect:            40
    incorrect true:     23
    incorrect false:    17
  unknown:            1325
  Score:              2166 (max: 5725)

https://github.com/esbmc/esbmc/actions/runs/14191126275
````

Master (900s):

````
Statistics:           3179 Files
  correct:            1843
    correct true:     1409
    correct false:     434
  incorrect:            61
    incorrect true:     43
    incorrect false:    18
  unknown:            1275
  Score:              1588 (max: 5725)

https://github.com/esbmc/esbmc/actions/runs/14191018069
````

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[Concurrency] unified data race flag (#2385)

This PR (900s):
```
Statistics:           1029 Files
  correct:             530
    correct true:      415
    correct false:     115
  incorrect:            21
    incorrect true:     14
    incorrect false:     7
  unknown:             478
  Score:               385 (max: 1823)

https://github.com/esbmc/esbmc/actions/runs/14193032102
```

Master (900s):
```
Statistics:           1029 Files
  correct:             565
    correct true:      449
    correct false:     116
  incorrect:            24
    incorrect true:     18
    incorrect false:     6
  unknown:             440
  Score:               342 (max: 1823)

https://github.com/esbmc/esbmc/actions/runs/14193024857
```

Update ExternalDependencies.cmake (#2390)

This should fix the old dependencies which where asking for minimum
cmake of < 3.5

---------

Co-authored-by: XLiZHI <958689657@qq.com>

Update stats-30s.txt

Update stats-300s.txt

Update stats-600s.txt

[Cov & Sol] Coverage support for Solidity (#2389)

[Solidity] Upgrade the AST merging algorithm for multiple files (#2392)

[Coverage] fix the covergae algorithm (#2365)

[python-frontend] Reuse C libm models for NumPy math functions (#2395)

[solidity] create unique temp file to prevent races (#2396)

[Solidity] Support Unit keywords && insufficient balance checks (#2393)

[Solidity] function call with options (#2398)

Update test.desc

[data-races-check] get rid of static analysis (#2399)

[Solidity] Fix function order bug in AST merge (#2400)

[solidity] fix regression (#2402)

Fix windows build (#2403)

[build] update ESBMC version

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

Update Release Notes for ESBMC v7.9 (#2404)

[python] Fix unary negation (#2406)

Update stats-30s.txt

[Solidity] add support for several keywords and update modelling algorithm (#2405)

[python] Expand numpy math models (#2407)

Reusing C models for floor, fabs, sin and exp.

[goto-programs] ESBMC Overflow Intrinsic Support (#2408)

Fixes rafaelsamenezes/goto-transcoder#2.

This PR implements intrinsic functions in ESBMC that perform arithmetic
operations with overflow detection. These intrinsics are designed to
return both the result of the operation and a flag indicating whether
overflow occurred, similar to `__builtin_*_overflow` in GCC/Clang.

---

| Intrinsic | Operation | Description |
|-----------|-----------|-------------|
| `__ESBMC_overflow_result_plus(a, b)` | `a + b` | Addition with
overflow check |
| `__ESBMC_overflow_result_minus(a, b)` | `a - b` | Subtraction with
overflow check |
| `__ESBMC_overflow_result_mult(a, b)` | `a * b` | Multiplication with
overflow check |
| `__ESBMC_overflow_result_shl(a, b)` | `a << b` | Shift-left with
overflow check |
| `__ESBMC_overflow_result_unary_minus(a)` | `-a` | Unary negation with
overflow check |

---

Each intrinsic returns a structure:

```c
struct __ESBMC_overflow_result {
  bool overflow;
  T result;
};

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>

Update stats-300s.txt

Update stats-30s.txt

[C++ verification] fix std::find function (#2410)

[Solidity] Bug fix (#2409)

Update README.md

[goto-programs] refactored do_function_call_symbol (#2411)

[regression] added test case for casting

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] added test case for casting

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] enabled test case

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] disabled test case

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

Update CREDITS

Update CREDITS

[python-frontend] Handling list slicing (#2414)

[python] check for float and str comparisons

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

Apply automatic changes

[python] improved report about the TypeError location

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

Apply automatic changes

[regression] added test case for casting

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] added test cases for casting

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] fixed regular expression

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] fixed regular expression

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[Python]  add chr() built-in function support (#2416)

This PR introduces support for Python’s built-in chr() function in the
ESBMC Python frontend. The chr() function takes an integer and returns a
one-character string corresponding to the ASCII code of that integer.

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>

[python] fixed range check

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[python] refactor our python frontend and extend chr() and float() built-in functions (#2417)

This PR enhances the ESBMC Python frontend by improving support for
built-in type-casting functions, particularly `chr()` and `float()`, and
refining type handling across expressions. It introduces better error
detection, stricter type enforcement, and new regression tests to
validate behavior.

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>

Fix default variable implementation (#2418)

[python] Add support for hex() built-in function (#2419)

[python] Handle string comparison for != operator (#2420)

[python] add support for python's oct() built-in function (#2421)

This PR extends ESBMC’s Python frontend to support the built-in `oct()`
function, which converts integers to their octal string representation
(e.g., oct(8) → "0o10", oct(-9) → "-0o11"). It adds implementation and
regression tests to ensure correct behavior for successful and failing
cases.

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>

[util] removed header

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

Update README.md

Update README.md

Update README.md

[python] Handle ord(): convert single-character string to integer Unicode code point (#2423)

This PR implements the `ord()` built-in function as described in the
Python documentation
(https://docs.python.org/3/library/functions.html#ord):

_"Given a string representing one Unicode character, return an integer
representing the Unicode code point of that character. For example,
ord('a') returns the integer 97 and ord('€') (Euro sign) returns 8364.
This is the inverse of
[chr()](https://docs.python.org/3/library/functions.html#chr)."_

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>

[C++ verification] update operational models (#2424)

[python] Support python true division semantics (/) with float type coercion (#2425)

This PR supports the Python frontend for correctly handling Python’s
true division operator (/) in mixed-type arithmetic, particularly when
the result is assigned to a float-annotated variable. It ensures that
integer operands are type-coerced to floatbv (IEEE floating-point type)
when necessary.

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>

[python] Improved inference to handle true division (/) operator (#2426)

[python] add support for str(float) conversion (#2427)

[python] support for int() and float() conversion for symbols (#2429)

This PR enhances our Python frontend by supporting Python-style int()
and float() conversions on symbolic variables holding string values.

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>

[cmake] enable precompile headers for gcc (#2428)

[symex] Support for CPROVER R_OK (#2431)

Fixes #2430 (comment).

This PR introduces the `__ESBMC_r_ok` intrinsic to ESBMC's symbolic
execution engine. This function enables users to verify that a memory
read of a specified length from a given address stays within the bounds
of the allocated object, improving ESBMC’s ability to check low-level
memory safety.

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>

[CI] add static CHERI llvm17 build (#2432)

[regression] added test case for division

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[python] fixed log warning

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[python] added test case for true division

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

update test.desc (#2433)

[python] Refactor get_binary_operator_expr (#2434)

[python] fixed log_warning

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] extended numpy test case for math

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] extended numpy test case for fabs

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[python] add support for numpy.fabs() (#2435)

This PR implements support for `numpy.fabs()` function using a native
`fabs` implementation in `libm`. It also improves error handling and
diagnostics for unsupported NumPy calls in the Python frontend.

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>

[CI] update llvm-16 for windows (#2436)

[python] added test cases for numpy math functions (#2437)

[regression] enabled test case for exp numpy function

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] added test case for Euler constant

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] enabled test case for exp numpy function

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[libm] fix acos function (#2442)

fix #2439

![image](https://github.com/user-attachments/assets/5a239593-ac87-45c1-9043-4ef72a8e720b)
https://en.wikipedia.org/wiki/Inverse_trigonometric_functions

Update README.md

Update README.md

[solidity] fix reentry attack checks (#2422)

This PR
- fix reentry checks algo
- fix inheritance
- fix contract address assignment

---------

Co-authored-by: hejueyun2 <hejueyun@gmail.com>

Update stats-30s.txt

[python]  add support and error checking for Python abs() builtin function (#2441)

This PR evaluates the abs() builtin for constant and symbolic numeric
types. It also rejects invalid types (e.g., str, list, etc.) with
appropriate TypeError messages. Lastly,, it adds test cases to validate
valid and invalid uses of abs().

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>

Update README.md

[regression] add test cases for divison by zero function

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

Update README.md

[numpy] Add support for numpy.arccos() and some fixes (#2444)

Update README.md

[numpy] enhance numpy math function verification coverage (#2445)

This PR expands the regression test suite for various NumPy mathematical
functions, improves verification accuracy, and addresses known edge
cases.

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>

Update README.md

[regression] added test case for function call

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] added test case for function call

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

Fix bounds computation for multi-dimensional arrays (#2446)

Fixes #2440

Update stats-300s.txt

Update README.md

Update README.md

Update stats-30s.txt

Update README.md

[regression] added test case for ethereum bug

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[numpy] added integer_squareroot test case

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[numpy] added integer_squareroot test case

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[OM] Fix warning messages for pthread and setjmp models (#2448)

[OM] removed unnecessary typecast

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

Update README.md

Update README.md

Update README.md

Update README.md

[Solidity] Add support for the library entity (#2394)

The purpose of this pull request is to add support for the "library" in
Solidity.

Update stats-30s.txt

[concurrency] : add support for pthread_cleanup_push and pthread_cleanup_pop (#2450)

[regression] added test cases for pthread cleanup

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[python]  Set location for the conditional statement (#2453)

Fixes #2452.

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

Update BUILDING.md (#2454)

Update some build instructions

[pthread] push/pop must match

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

Update stats-30s.txt

[pthread] improved comment for assertion

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] added more test cases for chained comparisons

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[Python] Extend support for compound assignment statements (#2458)

This PR extends our Python frontend to parse, type check, and translate
compound assignment statements (e.g., x += 1, y /= 2) into GOTO code. It
includes frontend code changes and regression test cases to ensure
correctness and detect corner-case failures such as division by zero and
improper type propagation.

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>

[python] Handling NumPy dot product (#2460)

This PR adds C model infrastructure to compute [dot
product](https://numpy.org/doc/stable/reference/generated/numpy.dot.html#numpy.dot)
of arrays.

---------

Co-authored-by: brcfarias <1334363+brcfarias@users.noreply.github.com>

[python] build symbolic multiplication tree for power/pow functions (#2462)

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>

[python] improved comment for handle_power_operator

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] added test cases in Python for while

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] added test cases in Python for function call

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] added test cases in Python for function call

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[python] Handle function calls used as arguments (#2465)

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>

[python] Improve abs() handling (#2466)

This PR enhances the Python frontend's `abs()` function handling to
detect and reject non-numeric arguments correctly, and to better infer
operand types. It addresses two previously undetected or misclassified
errors and adds supporting regression tests.

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>

[python-frontend] Handling array literals (#2467)

[regression] added test for function call + class

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] added test cases for pass in Python

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[python] Allow variables in NumPy math function calls (#2469)

[regression] added test cases for ceil in numpy

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

Update numpy.py

Update stats-300s.txt

[regression] added test cases for logican and in Python

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] added test cases for mod in Python

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] added test cases for range in Python

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[SMT solver] Updated Bitwuzla from v0.7.0 to v0.8.0 (#2472)

[python] improve range() handling (#2473)

[Solidity] Refactoring Mapping (#2468)

[python] Handling numpy functions (#2474)

[regression] added test cases for power in Python

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[symex] removed temporary fix for the condition coverage (#2477)

[python] improved support for power operator (**) (#2478)

Disabled broken solvers for benchexec CI (#2481)

Yices and Bitwuzla are not building on benchexec CI runs. The crashes
seems to be related to GMP.

Lets avoid it for now and enable again when it is working.

[C verification] Adjust the behavior of parameter checking for the unknown method (#2479)

Update README.md

[CHERI] support the verification of CHERI capability bounds (#2464)

[python] add support for unary+ operator

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[python] add support for unary+ operator

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[python] add support for unary+ operator

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[build] fix solvers gmp library link (#2483)

We have multiple solvers that depend on the gmp library at the same
time, perhaps putting the gmp lib link at the top level is better.

https://github.com/esbmc/esbmc/actions/runs/15322131655/job/43108043486

---------

Co-authored-by: Lucas C. Cordeiro <lucasccordeiro@gmail.com>

Update stats-30s.txt

[python] add support for bytes literals and indexing (#2484)

Revert "[build] fix solvers gmp library link" (#2485)

Reverts #2483

Revert "Revert "[build] fix solvers gmp library link"" (#2486)

Reverts #2485

[python] Add numpy.matmul (#2487)

Handling
[numpy.matmul](https://numpy.org/doc/stable/reference/generated/numpy.matmul.html)
calls.

[python] added tests for numpy det

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[python] added test cases for numpy dot

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[python] added test cases for numpy transpose

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[python] add support for Is and IsNot operators (#2480)

Update stats-300s.txt

[python] add support for numpy.dot() with 1D and mixed-dimension arrays (#2489)

This PR extends our Python frontend to support additional `numpy.dot()`
operand combinations, enabling verification of vector and matrix dot
products across a wider range of dimensions.

- 1D × 1D → scalar
- 1D × 2D → 1D array
- 2D × 1D → 1D array
- 2D × 2D → 2D array (already supported)

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>

[python] simplified is operator (#2490)

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

Update README.md

[python] added test case for None

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[python]  support for "NoneType" (#2493)

This PR introduces support for "NoneType" in the type system,
represented by a pointer to void. The Python None value is now
internally represented as a null pointer (constant_exprt with
pointer_type and value "0"). Enhanced AST type inference to detect
various forms of None across Python versions (e.g., Constant,
NameConstant, and Name).

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>

[numpy] disallow 3D or higher-dimensional arrays (#2492)

Fixes #2491.

This PR introduces validation in the Python frontend to reject 3D or
higher-dimensional arrays. It includes a new regression test (dot8) to
verify that ESBMC correctly throws an error when such input is provided.

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>

[python] improved return type inference (#2494)

This PR enhances our Python frontend’s ability to infer function return
types in ESBMC by improving logic in
`python_annotation::get_function_return_type`. It adds support for
parsing and handling annotated and inferred return types from Python AST
nodes.

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>
Co-authored-by: Bruno Farias <brunocarvalhofarias@gmail.com>

[regression] Show warning when KNOWNBUG tests stop failing (#2496)

**Before:**

![image](https://github.com/user-attachments/assets/9c35d422-2b50-43f1-9a1f-70a5999b5165)

**Now:**

![image](https://github.com/user-attachments/assets/87b665d1-42f8-4d36-af91-54b6a9c8de78)

CPROVER migration compatibility (#2443)

In this PR I am introducing ireps that were originated from CBMC into
the migration. However, I am focusing on implementing them as intrinsic
function calls. As we can then test the behavior using C files.

This is still a draft as it requires:
- [x] ~There is a bug in the transcoder that is making the pop_frame
assertion break.~ Applying same hack as coverage.
- [X] ~Overflow-result needs to invoke our intrinsic function.~ Can't
apply late goto transformations.
- [X]  ~r_ok intrinsic. ~ Will fix in another PR
- [X] .goto testcases need to be constructed from CBMC and then adapted
to ESBMC format (using goto-transcoder).
- [x] ~Export header of ESBMC. This is a C file including all the
intrinsic function signatures, this is meant to be exported as a .goto
file.~ Testing utilities will be ported to utils (#2476).

---------

Co-authored-by: Rafael Sá Menezes <rafael.sa.menezes40@gmail.com>
Co-authored-by: rafaelsamenezes <8601807+rafaelsamenezes@users.noreply.github.com>

[built-in] model builtin clzll using constraints  (#2501)

This is a PR of an attempt to model a builtin function with assumptions

The algorithm is as follows:
```
1. nondet symbol clz_sym(uint64)
2. assert(x != 0)
3. assume(0 ≤ clz_sym ≤ 63)
4. idx = 63 - clz_sym
5. assume(((x >> idx) & 1) != 0)
6. assume((x >> (idx+1)) == 0)
7. return (int)clz_sym
```

[python] enhanced string comparison handling (#2497)

This PR introduces a significant enhancement to the Python frontend's
handling of string comparisons, specifically improving the accuracy and
robustness of equality checks involving string-returning functions. It
adds new logic for constant resolution and identity function detection
and expands regression test coverage with various string manipulation
scenarios.

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>

[smt] don't access vector out of bounds (#2502)

`reserve` only changes the capacity, but not the size.
After `args.reserve(20)`, `args[10]` would still fail.
The loop that initialized all `args` has been changed to use push_back
instead of indices.
The few cases that later tried to write to e.g. `args[0]` where there
was previously no value written to `args[0]` have been changed to now do
the write.

Alternative to #2498

Co-authored-by: intrigus <abc123zeus@live.de>

[python] Handle string annotations like -> int (#2495)

Update stats-30s.txt

[goto-programs] add validation for invalid member accesses on incomplete or incorrectly typed expressions (Fixes #2236) (#2500)

[python] check for sideeffect in is_zero_length_array

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[python] avoid string comparison with sideeffects

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[python] added test cases for ternary operator

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

Update stats-30s.txt

[regression] added test case for overflow/nan

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

Update README.md

Update README.md

Update README.md

[CHERI] hide compressed/decompressed trace (#2504)

The counterexample becomes cleaner

[python] enhanced handling of true division (#2505)

This PR introduces several enhancements to the ESBMC Python frontend
(`python_converter.cpp`) to more accurately model Python semantics for
true division (/).

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>

Update README.md

[python] implement pow symbolically (#2506)

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>

[regression] removed --incremental-bmc

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

Update stats-600s.txt

[python] add support for python built-in function handling (#2507)

[regression] added test case from #1599

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] added test case from #1599

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] removed test case

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[python] add support for transforming general python for loops over iterables  (#2508)

[regression] added test case for Python class

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] improved test case

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[python] Fix compound assignment on object attributes (#2509)

[python] added test case for assert stmt

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] added test case for class

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[python] handles assertions involving function calls and refactor attribute handling (#2510)

[python] added test case for class

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] added test case for realloc

[CI] Integrate cheribsd-riscv64 system root (#2447)

The build on GitHub runner using cheribuild took too long and exceeded
the runner's hard disk capacity.

Currently I have uploaded the cheribsd SDK built locally and hope it
works as expected. ;)

[regression] added test case for realloc

[c++] added test case for vector

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[cpp] resolve mismatch template deduction errors with pointer types (#2517)

[cpp] add support for std::is_sorted and improve vector initialization (#2515)

[c++] implement missing ostreambuf_iterator methods for STL algorithm support (#2519)

[cpp] Fix vector const_reverse_iterator implementation for reverse iteration support (#2520)

Implement the `const_reverse_iterator` class with conversion
constructors and operators derived from `reverse_iterator`. Add missing
`const rbegin()/rend()` method implementations.

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[c++] fix map::insert() to accept temporary pair objects (#2521)

This PR changes `map::insert(value_type &val)` to `map::insert(const
value_type &val)` to allow binding to rvalue references. This fixes
compilation errors when inserting temporary pair objects such as
`mymap.insert(pair<char,int>('a', 100));`.

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[c++] fix multiset constructor ambiguity (#2522)

[c++] fix deque iterator increment operators binding to temporary (#2523)

[c++] fix npos handling (#2525)

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[c++] fix iterator assignment operators (#2526)

[goto-symex] use size directly (#2516)

[c++] add explicit int overload for list::insert and replace invalid null check in remove_if (#2527)

[c++] fix STL operator overload resolution errors in ostream, sstream and string headers (#2528)

[c++] add basic unordered_set support (#2529)

[solidity] improve overall performance (#2511)

```sh
Over 5 mins
esbmc --sol example.sol example.solast --incremental-bmc --no-standard-checks  1.90s user 0.19s system 64% cpu 3.255 total

Over 5 mins
esbmc --sol example.sol example.solast --contract Reproduction     4.13s user 0.20s system 80% cpu 5.384 total
```

![image](https://github.com/user-attachments/assets/f387cf4a-b3a6-4163-8aa7-d8594ce6bc95)

now the whole regression test can be finished in 120 second (-j 8)
---

This PR also contains some bug fixing, including library API
(_max/_min), address binding in trusted mode

---------

Co-authored-by: hejueyun2 <hejueyun@gmail.com>

[c++] added basic std::unordered_map support (#2530)

This PR introduces initial support for `std::unordered_map` in our C++
model, along with corresponding regression tests to validate its
correctness and error detection capabilities. The support includes a
simplified internal implementation suitable for bounded model checking,
and test cases to ensure expected behavior.

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[c++] removed esbmc_forward_iterator_tag

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] added test cases for Python range

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

Consider the guard when dealing with sideeffects (#2514)

This is one of the known problems:

1. The current guard needs to be taken into account when dealing with
memory allocation, especially in if expressions.
2. There is something wrong with our realloc operation that causes out
of bound. This is because we only adjust the bound in the track new
pointer, while nothing changes in the dynamic object. I tried to modify
the symbol directly, but at the SMT level there was a bit width
mismatch.

Should we rethink the implementation of realloc, perhaps malloc and
memcpy would be a good approach instead?

[c++] added test case for vector

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[C++ verification] Add a new implementation of typeid (#2534)

The type of polymorphism needs to be fetched at runtime, which is not
handled by the frontend, so for now we skip it for preliminary support.

The TC in this PR reflects all currently supported methods.

[c++] fix vector default constructor: remove explicit keyword (#2535)

[regression] reduced verification time for insert2_fail

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] reduced verification time for emplace_fail

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] added test cases for vector

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[c++] add allocator template parameter to std::vector (#2536)

Update main.cpp

[c++] applied coding style to vector

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[c++] add deterministic hash specializations for std::hash (#2538)

[python] added test case for range

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

Address incosistent behaviour in dump_smt function across solvers (#2524)

Updated the z3_convt::output_smt() and the bitwulza_convt::dump_smt()
functions to print
to stdout when no output was defined

Improved the handling of empty and "-" output paths in the
smtlib_conv::dump_smt() function

Addressed issue #2167

---------

Signed-off-by: mihaistate05 <mihaita.state@yahoo.com>
Signed-off-by: mihaistate <mihai.state03@yahoo.com>
Signed-off-by: mihaistate05 <mihai.state03@yahoo.com>
Co-authored-by: mihaistate05 <mihaita.state@yahoo.com>

[CI] improve auto commit (#2540)

Improve the code style check CI:

Only branches in the ESBMC repository will trigger the auto commit,
because git commit does not have permission to modify other
repositories.

Otherwise, we show the corresponding code, throw an error.

Update stats-300s.txt

Update stats-30s.txt
mihaistate added a commit that referenced this pull request Jun 27, 2025
Created a new memcpy function that copies 8 bytes
per iteration
The if statement checks that both dst and src pointers are
8-byte aligned. If they are, it copies 8 bytes of memory
using uint64_t pointers for efficiency. Remaining bytes are
handled in a trailing byte loop.
If the pointers are not 8-bytes aligned, the function falls back
to a safe byte-by-byte copy.

Signed-off-by: mihaistate05 <mihai.state03@yahoo.com>

[TC] add variant of github_60 test (#2362)

Make TC from #1175 compatible with windows (#2361)

[TC] add TC from #1290 (#2359)

Update README.md

Update README.md

[Z3] Support bitwise for integer arithmetic (#2354)

This PR refactors our bitwise operations handling and enhances our SMT
conversion functions to better support integer and boolean types. In
particular, it introduces more consistent handling for boolean and
integer types and improves compatibility with the Z3 solver's bit-vector
operations.
- [X] bitnot_id
- [X] bitxor_id
- [x] bitand_id
- [x] bitor_id
- [x] bitnand_id
- [x] bitnor_id
- [x] bitnxor_id

This PR (30s):

````
Statistics:          33569 Files
  correct:           18073
    correct true:    10743
    correct false:    7330
  incorrect:            40
    incorrect true:     13
    incorrect false:    27
  unknown:           15456
  Score:             27968 (max: 55885)

https://github.com/esbmc/esbmc/actions/runs/13956944037
````

Master (30s):

````
Statistics:          33569 Files
  correct:           18075
    correct true:    10743
    correct false:    7332
  incorrect:            40
    incorrect true:     13
    incorrect false:    27
  unknown:           15454
  Score:             27970 (max: 55885)

https://github.com/esbmc/esbmc/actions/runs/13906715936
````

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>

Update README.md

Update README.md

[C verification] remove nonexistent function (#2358)

Fixes #2355.

nand() doesn't actually exist in the standard C library; the <math.h>
header only defines nan(), nanf(), and nanl().

We introduced a new function : -)

Update README.md

Update stats-600s.txt

[cmake] update MathSAT download link (#2370)

The master version fails as:

````
Downloading Mathsat
-- Downloading MATHSAT from https://mathsat.fbk.eu/download.php?file=mathsat-5.6.10-linux-x86_64.tar.gz
-- Extracting MATHSAT
CMake Error at src/solvers/mathsat/CMakeLists.txt:20 (message):
  Could not find mathsat include headers, please check Mathsat_DIR
````

This PR adds the new download link MathSAT: for
https://mathsat.fbk.eu/release/mathsat-5.6.11-linux-x86_64.tar.gz.

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

Update README.md

[Overflow] Added overflow_cast to support integer overflow detection (#2367)

Fixes #2357.

This PR extends the `overflow_cast` method in ESBMC to handle integer
arithmetic typecast overflow detection.

Key Changes:
- Checks for signed and unsigned typecast overflow in integer
arithmetic.
- Handles cases where values exceed the target type’s range

This PR (30s):

````
Statistics:          33569 Files
  correct:           18079
    correct true:    10747
    correct false:    7332
  incorrect:            40
    incorrect true:     13
    incorrect false:    27
  unknown:           15450
  Score:             27978 (max: 55885)

https://github.com/esbmc/esbmc/actions/runs/14016741212
````

Master (30s):

````
Statistics:          33569 Files
  correct:           18075
    correct true:    10743
    correct false:    7332
  incorrect:            40
    incorrect true:     13
    incorrect false:    27
  unknown:           15454
  Score:             27970 (max: 55885)

https://github.com/esbmc/esbmc/actions/runs/13906715936
````

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>

Update stats-30s.txt

[memory-leak] Track global memory (#2372)

This PR fixes #2335.

Here, 'g' acts as a guard condition, determining whether 'e' should be
considered. 'same_object2tc(obj, e)' checks if 'obj' and 'e' refer to
the same object; if 'g' is an AND condition (is_and2t) or already a
same-object check (is_same_object2t), then 'g' is combined; otherwise,
we directly use 'same_object2tc(obj, e).'

This PR (30s):

````
Statistics:          33569 Files
  correct:           18077
    correct true:    10751
    correct false:    7326
  incorrect:            36
    incorrect true:     13
    incorrect false:    23
  unknown:           15456
  Score:             28044 (max: 55885)

https://github.com/esbmc/esbmc/actions/runs/14046421617
````

Master (30s):

````
Statistics:          33569 Files
  correct:           18079
    correct true:    10747
    correct false:    7332
  incorrect:            40
    incorrect true:     13
    incorrect false:    27
  unknown:           15450
  Score:             27978 (max: 55885)

https://github.com/esbmc/esbmc/actions/runs/14016741212
````

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>

Update stats-30s.txt

Update stats-300s.txt

[overflow] check typecast overflow for signed and unsigned int only (#2376)

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[overflow] use resolved_type instead

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

Update stats-300s.txt

[Solidity] fix address modelling (#2379)

[OM] Refactoring our C++ operational models: functional (#2381)

[python-frontend] Model for numpy.ceil (#2382)

- Add operational model for
[numpy.ceil](https://numpy.org/doc/stable/reference/generated/numpy.ceil.html#numpy.ceil).
- Fix handling of negative numbers in lists.

---------

Co-authored-by: brcfarias <1334363+brcfarias@users.noreply.github.com>

[Z3] Fix overflow detection for signed subtraction and unsigned division and modulus (#2383)

Update README.md

[overflow] removed unused variable

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

Update stats-30s.txt

[sv-comp] increase context-switch to 3 (#2378)

This PR (900s):

````
Statistics:           3179 Files
  correct:            1814
    correct true:     1360
    correct false:     454
  incorrect:            40
    incorrect true:     23
    incorrect false:    17
  unknown:            1325
  Score:              2166 (max: 5725)

https://github.com/esbmc/esbmc/actions/runs/14191126275
````

Master (900s):

````
Statistics:           3179 Files
  correct:            1843
    correct true:     1409
    correct false:     434
  incorrect:            61
    incorrect true:     43
    incorrect false:    18
  unknown:            1275
  Score:              1588 (max: 5725)

https://github.com/esbmc/esbmc/actions/runs/14191018069
````

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[Concurrency] unified data race flag (#2385)

This PR (900s):
```
Statistics:           1029 Files
  correct:             530
    correct true:      415
    correct false:     115
  incorrect:            21
    incorrect true:     14
    incorrect false:     7
  unknown:             478
  Score:               385 (max: 1823)

https://github.com/esbmc/esbmc/actions/runs/14193032102
```

Master (900s):
```
Statistics:           1029 Files
  correct:             565
    correct true:      449
    correct false:     116
  incorrect:            24
    incorrect true:     18
    incorrect false:     6
  unknown:             440
  Score:               342 (max: 1823)

https://github.com/esbmc/esbmc/actions/runs/14193024857
```

Update ExternalDependencies.cmake (#2390)

This should fix the old dependencies which where asking for minimum
cmake of < 3.5

---------

Co-authored-by: XLiZHI <958689657@qq.com>

Update stats-30s.txt

Update stats-300s.txt

Update stats-600s.txt

[Cov & Sol] Coverage support for Solidity (#2389)

[Solidity] Upgrade the AST merging algorithm for multiple files (#2392)

[Coverage] fix the covergae algorithm (#2365)

[python-frontend] Reuse C libm models for NumPy math functions (#2395)

[solidity] create unique temp file to prevent races (#2396)

[Solidity] Support Unit keywords && insufficient balance checks (#2393)

[Solidity] function call with options (#2398)

Update test.desc

[data-races-check] get rid of static analysis (#2399)

[Solidity] Fix function order bug in AST merge (#2400)

[solidity] fix regression (#2402)

Fix windows build (#2403)

[build] update ESBMC version

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

Update Release Notes for ESBMC v7.9 (#2404)

[python] Fix unary negation (#2406)

Update stats-30s.txt

[Solidity] add support for several keywords and update modelling algorithm (#2405)

[python] Expand numpy math models (#2407)

Reusing C models for floor, fabs, sin and exp.

[goto-programs] ESBMC Overflow Intrinsic Support (#2408)

Fixes rafaelsamenezes/goto-transcoder#2.

This PR implements intrinsic functions in ESBMC that perform arithmetic
operations with overflow detection. These intrinsics are designed to
return both the result of the operation and a flag indicating whether
overflow occurred, similar to `__builtin_*_overflow` in GCC/Clang.

---

| Intrinsic | Operation | Description |
|-----------|-----------|-------------|
| `__ESBMC_overflow_result_plus(a, b)` | `a + b` | Addition with
overflow check |
| `__ESBMC_overflow_result_minus(a, b)` | `a - b` | Subtraction with
overflow check |
| `__ESBMC_overflow_result_mult(a, b)` | `a * b` | Multiplication with
overflow check |
| `__ESBMC_overflow_result_shl(a, b)` | `a << b` | Shift-left with
overflow check |
| `__ESBMC_overflow_result_unary_minus(a)` | `-a` | Unary negation with
overflow check |

---

Each intrinsic returns a structure:

```c
struct __ESBMC_overflow_result {
  bool overflow;
  T result;
};

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>

Update stats-300s.txt

Update stats-30s.txt

[C++ verification] fix std::find function (#2410)

[Solidity] Bug fix (#2409)

Update README.md

[goto-programs] refactored do_function_call_symbol (#2411)

[regression] added test case for casting

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] added test case for casting

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] enabled test case

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] disabled test case

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

Update CREDITS

Update CREDITS

[python-frontend] Handling list slicing (#2414)

[python] check for float and str comparisons

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

Apply automatic changes

[python] improved report about the TypeError location

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

Apply automatic changes

[regression] added test case for casting

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] added test cases for casting

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] fixed regular expression

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] fixed regular expression

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[Python]  add chr() built-in function support (#2416)

This PR introduces support for Python’s built-in chr() function in the
ESBMC Python frontend. The chr() function takes an integer and returns a
one-character string corresponding to the ASCII code of that integer.

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>

[python] fixed range check

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[python] refactor our python frontend and extend chr() and float() built-in functions (#2417)

This PR enhances the ESBMC Python frontend by improving support for
built-in type-casting functions, particularly `chr()` and `float()`, and
refining type handling across expressions. It introduces better error
detection, stricter type enforcement, and new regression tests to
validate behavior.

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>

Fix default variable implementation (#2418)

[python] Add support for hex() built-in function (#2419)

[python] Handle string comparison for != operator (#2420)

[python] add support for python's oct() built-in function (#2421)

This PR extends ESBMC’s Python frontend to support the built-in `oct()`
function, which converts integers to their octal string representation
(e.g., oct(8) → "0o10", oct(-9) → "-0o11"). It adds implementation and
regression tests to ensure correct behavior for successful and failing
cases.

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>

[util] removed header

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

Update README.md

Update README.md

Update README.md

[python] Handle ord(): convert single-character string to integer Unicode code point (#2423)

This PR implements the `ord()` built-in function as described in the
Python documentation
(https://docs.python.org/3/library/functions.html#ord):

_"Given a string representing one Unicode character, return an integer
representing the Unicode code point of that character. For example,
ord('a') returns the integer 97 and ord('€') (Euro sign) returns 8364.
This is the inverse of
[chr()](https://docs.python.org/3/library/functions.html#chr)."_

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>

[C++ verification] update operational models (#2424)

[python] Support python true division semantics (/) with float type coercion (#2425)

This PR supports the Python frontend for correctly handling Python’s
true division operator (/) in mixed-type arithmetic, particularly when
the result is assigned to a float-annotated variable. It ensures that
integer operands are type-coerced to floatbv (IEEE floating-point type)
when necessary.

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>

[python] Improved inference to handle true division (/) operator (#2426)

[python] add support for str(float) conversion (#2427)

[python] support for int() and float() conversion for symbols (#2429)

This PR enhances our Python frontend by supporting Python-style int()
and float() conversions on symbolic variables holding string values.

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>

[cmake] enable precompile headers for gcc (#2428)

[symex] Support for CPROVER R_OK (#2431)

Fixes #2430 (comment).

This PR introduces the `__ESBMC_r_ok` intrinsic to ESBMC's symbolic
execution engine. This function enables users to verify that a memory
read of a specified length from a given address stays within the bounds
of the allocated object, improving ESBMC’s ability to check low-level
memory safety.

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>

[CI] add static CHERI llvm17 build (#2432)

[regression] added test case for division

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[python] fixed log warning

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[python] added test case for true division

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

update test.desc (#2433)

[python] Refactor get_binary_operator_expr (#2434)

[python] fixed log_warning

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] extended numpy test case for math

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] extended numpy test case for fabs

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[python] add support for numpy.fabs() (#2435)

This PR implements support for `numpy.fabs()` function using a native
`fabs` implementation in `libm`. It also improves error handling and
diagnostics for unsupported NumPy calls in the Python frontend.

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>

[CI] update llvm-16 for windows (#2436)

[python] added test cases for numpy math functions (#2437)

[regression] enabled test case for exp numpy function

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] added test case for Euler constant

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] enabled test case for exp numpy function

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[libm] fix acos function (#2442)

fix #2439

![image](https://github.com/user-attachments/assets/5a239593-ac87-45c1-9043-4ef72a8e720b)
https://en.wikipedia.org/wiki/Inverse_trigonometric_functions

Update README.md

Update README.md

[solidity] fix reentry attack checks (#2422)

This PR
- fix reentry checks algo
- fix inheritance
- fix contract address assignment

---------

Co-authored-by: hejueyun2 <hejueyun@gmail.com>

Update stats-30s.txt

[python]  add support and error checking for Python abs() builtin function (#2441)

This PR evaluates the abs() builtin for constant and symbolic numeric
types. It also rejects invalid types (e.g., str, list, etc.) with
appropriate TypeError messages. Lastly,, it adds test cases to validate
valid and invalid uses of abs().

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>

Update README.md

[regression] add test cases for divison by zero function

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

Update README.md

[numpy] Add support for numpy.arccos() and some fixes (#2444)

Update README.md

[numpy] enhance numpy math function verification coverage (#2445)

This PR expands the regression test suite for various NumPy mathematical
functions, improves verification accuracy, and addresses known edge
cases.

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>

Update README.md

[regression] added test case for function call

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] added test case for function call

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

Fix bounds computation for multi-dimensional arrays (#2446)

Fixes #2440

Update stats-300s.txt

Update README.md

Update README.md

Update stats-30s.txt

Update README.md

[regression] added test case for ethereum bug

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[numpy] added integer_squareroot test case

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[numpy] added integer_squareroot test case

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[OM] Fix warning messages for pthread and setjmp models (#2448)

[OM] removed unnecessary typecast

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

Update README.md

Update README.md

Update README.md

Update README.md

[Solidity] Add support for the library entity (#2394)

The purpose of this pull request is to add support for the "library" in
Solidity.

Update stats-30s.txt

[concurrency] : add support for pthread_cleanup_push and pthread_cleanup_pop (#2450)

[regression] added test cases for pthread cleanup

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[python]  Set location for the conditional statement (#2453)

Fixes #2452.

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

Update BUILDING.md (#2454)

Update some build instructions

[pthread] push/pop must match

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

Update stats-30s.txt

[pthread] improved comment for assertion

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] added more test cases for chained comparisons

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[Python] Extend support for compound assignment statements (#2458)

This PR extends our Python frontend to parse, type check, and translate
compound assignment statements (e.g., x += 1, y /= 2) into GOTO code. It
includes frontend code changes and regression test cases to ensure
correctness and detect corner-case failures such as division by zero and
improper type propagation.

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>

[python] Handling NumPy dot product (#2460)

This PR adds C model infrastructure to compute [dot
product](https://numpy.org/doc/stable/reference/generated/numpy.dot.html#numpy.dot)
of arrays.

---------

Co-authored-by: brcfarias <1334363+brcfarias@users.noreply.github.com>

[python] build symbolic multiplication tree for power/pow functions (#2462)

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>

[python] improved comment for handle_power_operator

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] added test cases in Python for while

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] added test cases in Python for function call

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] added test cases in Python for function call

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[python] Handle function calls used as arguments (#2465)

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>

[python] Improve abs() handling (#2466)

This PR enhances the Python frontend's `abs()` function handling to
detect and reject non-numeric arguments correctly, and to better infer
operand types. It addresses two previously undetected or misclassified
errors and adds supporting regression tests.

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>

[python-frontend] Handling array literals (#2467)

[regression] added test for function call + class

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] added test cases for pass in Python

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[python] Allow variables in NumPy math function calls (#2469)

[regression] added test cases for ceil in numpy

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

Update numpy.py

Update stats-300s.txt

[regression] added test cases for logican and in Python

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] added test cases for mod in Python

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] added test cases for range in Python

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[SMT solver] Updated Bitwuzla from v0.7.0 to v0.8.0 (#2472)

[python] improve range() handling (#2473)

[Solidity] Refactoring Mapping (#2468)

[python] Handling numpy functions (#2474)

[regression] added test cases for power in Python

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[symex] removed temporary fix for the condition coverage (#2477)

[python] improved support for power operator (**) (#2478)

Disabled broken solvers for benchexec CI (#2481)

Yices and Bitwuzla are not building on benchexec CI runs. The crashes
seems to be related to GMP.

Lets avoid it for now and enable again when it is working.

[C verification] Adjust the behavior of parameter checking for the unknown method (#2479)

Update README.md

[CHERI] support the verification of CHERI capability bounds (#2464)

[python] add support for unary+ operator

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[python] add support for unary+ operator

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[python] add support for unary+ operator

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[build] fix solvers gmp library link (#2483)

We have multiple solvers that depend on the gmp library at the same
time, perhaps putting the gmp lib link at the top level is better.

https://github.com/esbmc/esbmc/actions/runs/15322131655/job/43108043486

---------

Co-authored-by: Lucas C. Cordeiro <lucasccordeiro@gmail.com>

Update stats-30s.txt

[python] add support for bytes literals and indexing (#2484)

Revert "[build] fix solvers gmp library link" (#2485)

Reverts #2483

Revert "Revert "[build] fix solvers gmp library link"" (#2486)

Reverts #2485

[python] Add numpy.matmul (#2487)

Handling
[numpy.matmul](https://numpy.org/doc/stable/reference/generated/numpy.matmul.html)
calls.

[python] added tests for numpy det

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[python] added test cases for numpy dot

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[python] added test cases for numpy transpose

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[python] add support for Is and IsNot operators (#2480)

Update stats-300s.txt

[python] add support for numpy.dot() with 1D and mixed-dimension arrays (#2489)

This PR extends our Python frontend to support additional `numpy.dot()`
operand combinations, enabling verification of vector and matrix dot
products across a wider range of dimensions.

- 1D × 1D → scalar
- 1D × 2D → 1D array
- 2D × 1D → 1D array
- 2D × 2D → 2D array (already supported)

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>

[python] simplified is operator (#2490)

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

Update README.md

[python] added test case for None

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[python]  support for "NoneType" (#2493)

This PR introduces support for "NoneType" in the type system,
represented by a pointer to void. The Python None value is now
internally represented as a null pointer (constant_exprt with
pointer_type and value "0"). Enhanced AST type inference to detect
various forms of None across Python versions (e.g., Constant,
NameConstant, and Name).

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>

[numpy] disallow 3D or higher-dimensional arrays (#2492)

Fixes #2491.

This PR introduces validation in the Python frontend to reject 3D or
higher-dimensional arrays. It includes a new regression test (dot8) to
verify that ESBMC correctly throws an error when such input is provided.

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>

[python] improved return type inference (#2494)

This PR enhances our Python frontend’s ability to infer function return
types in ESBMC by improving logic in
`python_annotation::get_function_return_type`. It adds support for
parsing and handling annotated and inferred return types from Python AST
nodes.

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>
Co-authored-by: Bruno Farias <brunocarvalhofarias@gmail.com>

[regression] Show warning when KNOWNBUG tests stop failing (#2496)

**Before:**

![image](https://github.com/user-attachments/assets/9c35d422-2b50-43f1-9a1f-70a5999b5165)

**Now:**

![image](https://github.com/user-attachments/assets/87b665d1-42f8-4d36-af91-54b6a9c8de78)

CPROVER migration compatibility (#2443)

In this PR I am introducing ireps that were originated from CBMC into
the migration. However, I am focusing on implementing them as intrinsic
function calls. As we can then test the behavior using C files.

This is still a draft as it requires:
- [x] ~There is a bug in the transcoder that is making the pop_frame
assertion break.~ Applying same hack as coverage.
- [X] ~Overflow-result needs to invoke our intrinsic function.~ Can't
apply late goto transformations.
- [X]  ~r_ok intrinsic. ~ Will fix in another PR
- [X] .goto testcases need to be constructed from CBMC and then adapted
to ESBMC format (using goto-transcoder).
- [x] ~Export header of ESBMC. This is a C file including all the
intrinsic function signatures, this is meant to be exported as a .goto
file.~ Testing utilities will be ported to utils (#2476).

---------

Co-authored-by: Rafael Sá Menezes <rafael.sa.menezes40@gmail.com>
Co-authored-by: rafaelsamenezes <8601807+rafaelsamenezes@users.noreply.github.com>

[built-in] model builtin clzll using constraints  (#2501)

This is a PR of an attempt to model a builtin function with assumptions

The algorithm is as follows:
```
1. nondet symbol clz_sym(uint64)
2. assert(x != 0)
3. assume(0 ≤ clz_sym ≤ 63)
4. idx = 63 - clz_sym
5. assume(((x >> idx) & 1) != 0)
6. assume((x >> (idx+1)) == 0)
7. return (int)clz_sym
```

[python] enhanced string comparison handling (#2497)

This PR introduces a significant enhancement to the Python frontend's
handling of string comparisons, specifically improving the accuracy and
robustness of equality checks involving string-returning functions. It
adds new logic for constant resolution and identity function detection
and expands regression test coverage with various string manipulation
scenarios.

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>

[smt] don't access vector out of bounds (#2502)

`reserve` only changes the capacity, but not the size.
After `args.reserve(20)`, `args[10]` would still fail.
The loop that initialized all `args` has been changed to use push_back
instead of indices.
The few cases that later tried to write to e.g. `args[0]` where there
was previously no value written to `args[0]` have been changed to now do
the write.

Alternative to #2498

Co-authored-by: intrigus <abc123zeus@live.de>

[python] Handle string annotations like -> int (#2495)

Update stats-30s.txt

[goto-programs] add validation for invalid member accesses on incomplete or incorrectly typed expressions (Fixes #2236) (#2500)

[python] check for sideeffect in is_zero_length_array

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[python] avoid string comparison with sideeffects

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[python] added test cases for ternary operator

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

Update stats-30s.txt

[regression] added test case for overflow/nan

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

Update README.md

Update README.md

Update README.md

[CHERI] hide compressed/decompressed trace (#2504)

The counterexample becomes cleaner

[python] enhanced handling of true division (#2505)

This PR introduces several enhancements to the ESBMC Python frontend
(`python_converter.cpp`) to more accurately model Python semantics for
true division (/).

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>

Update README.md

[python] implement pow symbolically (#2506)

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>

[regression] removed --incremental-bmc

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

Update stats-600s.txt

[python] add support for python built-in function handling (#2507)

[regression] added test case from #1599

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] added test case from #1599

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] removed test case

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[python] add support for transforming general python for loops over iterables  (#2508)

[regression] added test case for Python class

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] improved test case

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[python] Fix compound assignment on object attributes (#2509)

[python] added test case for assert stmt

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] added test case for class

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[python] handles assertions involving function calls and refactor attribute handling (#2510)

[python] added test case for class

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] added test case for realloc

[CI] Integrate cheribsd-riscv64 system root (#2447)

The build on GitHub runner using cheribuild took too long and exceeded
the runner's hard disk capacity.

Currently I have uploaded the cheribsd SDK built locally and hope it
works as expected. ;)

[regression] added test case for realloc

[c++] added test case for vector

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[cpp] resolve mismatch template deduction errors with pointer types (#2517)

[cpp] add support for std::is_sorted and improve vector initialization (#2515)

[c++] implement missing ostreambuf_iterator methods for STL algorithm support (#2519)

[cpp] Fix vector const_reverse_iterator implementation for reverse iteration support (#2520)

Implement the `const_reverse_iterator` class with conversion
constructors and operators derived from `reverse_iterator`. Add missing
`const rbegin()/rend()` method implementations.

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[c++] fix map::insert() to accept temporary pair objects (#2521)

This PR changes `map::insert(value_type &val)` to `map::insert(const
value_type &val)` to allow binding to rvalue references. This fixes
compilation errors when inserting temporary pair objects such as
`mymap.insert(pair<char,int>('a', 100));`.

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[c++] fix multiset constructor ambiguity (#2522)

[c++] fix deque iterator increment operators binding to temporary (#2523)

[c++] fix npos handling (#2525)

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[c++] fix iterator assignment operators (#2526)

[goto-symex] use size directly (#2516)

[c++] add explicit int overload for list::insert and replace invalid null check in remove_if (#2527)

[c++] fix STL operator overload resolution errors in ostream, sstream and string headers (#2528)

[c++] add basic unordered_set support (#2529)

[solidity] improve overall performance (#2511)

```sh
Over 5 mins
esbmc --sol example.sol example.solast --incremental-bmc --no-standard-checks  1.90s user 0.19s system 64% cpu 3.255 total

Over 5 mins
esbmc --sol example.sol example.solast --contract Reproduction     4.13s user 0.20s system 80% cpu 5.384 total
```

![image](https://github.com/user-attachments/assets/f387cf4a-b3a6-4163-8aa7-d8594ce6bc95)

now the whole regression test can be finished in 120 second (-j 8)
---

This PR also contains some bug fixing, including library API
(_max/_min), address binding in trusted mode

---------

Co-authored-by: hejueyun2 <hejueyun@gmail.com>

[c++] added basic std::unordered_map support (#2530)

This PR introduces initial support for `std::unordered_map` in our C++
model, along with corresponding regression tests to validate its
correctness and error detection capabilities. The support includes a
simplified internal implementation suitable for bounded model checking,
and test cases to ensure expected behavior.

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[c++] removed esbmc_forward_iterator_tag

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] added test cases for Python range

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

Consider the guard when dealing with sideeffects (#2514)

This is one of the known problems:

1. The current guard needs to be taken into account when dealing with
memory allocation, especially in if expressions.
2. There is something wrong with our realloc operation that causes out
of bound. This is because we only adjust the bound in the track new
pointer, while nothing changes in the dynamic object. I tried to modify
the symbol directly, but at the SMT level there was a bit width
mismatch.

Should we rethink the implementation of realloc, perhaps malloc and
memcpy would be a good approach instead?

[c++] added test case for vector

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[C++ verification] Add a new implementation of typeid (#2534)

The type of polymorphism needs to be fetched at runtime, which is not
handled by the frontend, so for now we skip it for preliminary support.

The TC in this PR reflects all currently supported methods.

[c++] fix vector default constructor: remove explicit keyword (#2535)

[regression] reduced verification time for insert2_fail

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] reduced verification time for emplace_fail

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] added test cases for vector

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[c++] add allocator template parameter to std::vector (#2536)

Update main.cpp

[c++] applied coding style to vector

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[c++] add deterministic hash specializations for std::hash (#2538)

[python] added test case for range

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

Address incosistent behaviour in dump_smt function across solvers (#2524)

Updated the z3_convt::output_smt() and the bitwulza_convt::dump_smt()
functions to print
to stdout when no output was defined

Improved the handling of empty and "-" output paths in the
smtlib_conv::dump_smt() function

Addressed issue #2167

---------

Signed-off-by: mihaistate05 <mihaita.state@yahoo.com>
Signed-off-by: mihaistate <mihai.state03@yahoo.com>
Signed-off-by: mihaistate05 <mihai.state03@yahoo.com>
Co-authored-by: mihaistate05 <mihaita.state@yahoo.com>

[CI] improve auto commit (#2540)

Improve the code style check CI:

Only branches in the ESBMC repository will trigger the auto commit,
because git commit does not have permission to modify other
repositories.

Otherwise, we show the corresponding code, throw an error.

Update stats-300s.txt

Update stats-30s.txt

[c++] fixed typos in string

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[c++] fix namespace collision in functional header (#2541)

This PR replaces unqualified `std::` references with `::std::` to
resolve parsing errors where ESBMC incorrectly looks up standard library
features in `__shedskin__::std`
(https://github.com/shedskin/shedskin/blob/master/shedskin/lib/builtin/hash.hpp)
instead of the `global ::std` namespace.

````
ESBMC version 7.9.0 64-bit x86_64 linux
Target: 64-bit little-endian x86_64-unknown-linux with esbmclibc
Parsing main.cpp
In file included from main.cpp:1:
In file included from ./builtin.hpp:223:
In file included from ./builtin/hash.hpp:5:
/tmp/esbmc-cpp-headers-ba1b-0202-35ea/functional:50:50: error: no template named 'forward' in namespace '__shedskin__::std'; did you mean '::std::forward'?
  explicit callable_wrapper(Callable &&f) : func(std::forward<Callable>(f))
                                                 ^~~~~
/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/move.h:77:5: note: '::std::forward' declared here
    forward(typename std::remove_reference<_Tp>::type& __t) noexcept
    ^
In file included from main.cpp:1:
In file included from ./builtin.hpp:223:
In file included from ./builtin/hash.hpp:5:
/tmp/esbmc-cpp-headers-ba1b-0202-35ea/functional:50:50: error: no template named 'forward' in namespace '__shedskin__::std'; did you mean '::std::forward'?
  explicit callable_wrapper(Callable &&f) : func(std::forward<Callable>(f))
````

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[c++] added basic bitset operational model (#2543)

[python-frontend] Handling string attributes (#2546)

- Handle string attributes as char pointers;
- Append `'\0'` to char arrays to enable use of `strcmp` for string
comparisons.

---------

Co-authored-by: brcfarias <1334363+brcfarias@users.noreply.github.com>
mihaistate added a commit that referenced this pull request Jun 27, 2025
Update stats-300s.txt

[OM] Overlapping memory check

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] Added test case to check for overlapping memory

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] Added test to check for NULL in memcpy

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[OM] Check for src and dest NULL

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] detected NULL source pointer

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[OM] return dst if n=0 (nothing to copy)

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] check for memcpy output

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

Apply automatic changes

[TC] add variant of github_60 test (#2362)

Make TC from #1175 compatible with windows (#2361)

[TC] add TC from #1290 (#2359)

Update README.md

Update README.md

[Z3] Support bitwise for integer arithmetic (#2354)

This PR refactors our bitwise operations handling and enhances our SMT
conversion functions to better support integer and boolean types. In
particular, it introduces more consistent handling for boolean and
integer types and improves compatibility with the Z3 solver's bit-vector
operations.
- [X] bitnot_id
- [X] bitxor_id
- [x] bitand_id
- [x] bitor_id
- [x] bitnand_id
- [x] bitnor_id
- [x] bitnxor_id

This PR (30s):

````
Statistics:          33569 Files
  correct:           18073
    correct true:    10743
    correct false:    7330
  incorrect:            40
    incorrect true:     13
    incorrect false:    27
  unknown:           15456
  Score:             27968 (max: 55885)

https://github.com/esbmc/esbmc/actions/runs/13956944037
````

Master (30s):

````
Statistics:          33569 Files
  correct:           18075
    correct true:    10743
    correct false:    7332
  incorrect:            40
    incorrect true:     13
    incorrect false:    27
  unknown:           15454
  Score:             27970 (max: 55885)

https://github.com/esbmc/esbmc/actions/runs/13906715936
````

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>

Update README.md

Update README.md

[C verification] remove nonexistent function (#2358)

Fixes #2355.

nand() doesn't actually exist in the standard C library; the <math.h>
header only defines nan(), nanf(), and nanl().

We introduced a new function : -)

Update README.md

Update stats-600s.txt

[cmake] update MathSAT download link (#2370)

The master version fails as:

````
Downloading Mathsat
-- Downloading MATHSAT from https://mathsat.fbk.eu/download.php?file=mathsat-5.6.10-linux-x86_64.tar.gz
-- Extracting MATHSAT
CMake Error at src/solvers/mathsat/CMakeLists.txt:20 (message):
  Could not find mathsat include headers, please check Mathsat_DIR
````

This PR adds the new download link MathSAT: for
https://mathsat.fbk.eu/release/mathsat-5.6.11-linux-x86_64.tar.gz.

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

Update README.md

[Overflow] Added overflow_cast to support integer overflow detection (#2367)

Fixes #2357.

This PR extends the `overflow_cast` method in ESBMC to handle integer
arithmetic typecast overflow detection.

Key Changes:
- Checks for signed and unsigned typecast overflow in integer
arithmetic.
- Handles cases where values exceed the target type’s range

This PR (30s):

````
Statistics:          33569 Files
  correct:           18079
    correct true:    10747
    correct false:    7332
  incorrect:            40
    incorrect true:     13
    incorrect false:    27
  unknown:           15450
  Score:             27978 (max: 55885)

https://github.com/esbmc/esbmc/actions/runs/14016741212
````

Master (30s):

````
Statistics:          33569 Files
  correct:           18075
    correct true:    10743
    correct false:    7332
  incorrect:            40
    incorrect true:     13
    incorrect false:    27
  unknown:           15454
  Score:             27970 (max: 55885)

https://github.com/esbmc/esbmc/actions/runs/13906715936
````

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>

Update stats-30s.txt

[memory-leak] Track global memory (#2372)

This PR fixes #2335.

Here, 'g' acts as a guard condition, determining whether 'e' should be
considered. 'same_object2tc(obj, e)' checks if 'obj' and 'e' refer to
the same object; if 'g' is an AND condition (is_and2t) or already a
same-object check (is_same_object2t), then 'g' is combined; otherwise,
we directly use 'same_object2tc(obj, e).'

This PR (30s):

````
Statistics:          33569 Files
  correct:           18077
    correct true:    10751
    correct false:    7326
  incorrect:            36
    incorrect true:     13
    incorrect false:    23
  unknown:           15456
  Score:             28044 (max: 55885)

https://github.com/esbmc/esbmc/actions/runs/14046421617
````

Master (30s):

````
Statistics:          33569 Files
  correct:           18079
    correct true:    10747
    correct false:    7332
  incorrect:            40
    incorrect true:     13
    incorrect false:    27
  unknown:           15450
  Score:             27978 (max: 55885)

https://github.com/esbmc/esbmc/actions/runs/14016741212
````

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>

Update stats-30s.txt

Update stats-300s.txt

[overflow] check typecast overflow for signed and unsigned int only (#2376)

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[overflow] use resolved_type instead

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

Update stats-300s.txt

[Solidity] fix address modelling (#2379)

[OM] Refactoring our C++ operational models: functional (#2381)

[python-frontend] Model for numpy.ceil (#2382)

- Add operational model for
[numpy.ceil](https://numpy.org/doc/stable/reference/generated/numpy.ceil.html#numpy.ceil).
- Fix handling of negative numbers in lists.

---------

Co-authored-by: brcfarias <1334363+brcfarias@users.noreply.github.com>

[Z3] Fix overflow detection for signed subtraction and unsigned division and modulus (#2383)

Update README.md

[overflow] removed unused variable

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

Update stats-30s.txt

[sv-comp] increase context-switch to 3 (#2378)

This PR (900s):

````
Statistics:           3179 Files
  correct:            1814
    correct true:     1360
    correct false:     454
  incorrect:            40
    incorrect true:     23
    incorrect false:    17
  unknown:            1325
  Score:              2166 (max: 5725)

https://github.com/esbmc/esbmc/actions/runs/14191126275
````

Master (900s):

````
Statistics:           3179 Files
  correct:            1843
    correct true:     1409
    correct false:     434
  incorrect:            61
    incorrect true:     43
    incorrect false:    18
  unknown:            1275
  Score:              1588 (max: 5725)

https://github.com/esbmc/esbmc/actions/runs/14191018069
````

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[Concurrency] unified data race flag (#2385)

This PR (900s):
```
Statistics:           1029 Files
  correct:             530
    correct true:      415
    correct false:     115
  incorrect:            21
    incorrect true:     14
    incorrect false:     7
  unknown:             478
  Score:               385 (max: 1823)

https://github.com/esbmc/esbmc/actions/runs/14193032102
```

Master (900s):
```
Statistics:           1029 Files
  correct:             565
    correct true:      449
    correct false:     116
  incorrect:            24
    incorrect true:     18
    incorrect false:     6
  unknown:             440
  Score:               342 (max: 1823)

https://github.com/esbmc/esbmc/actions/runs/14193024857
```

Update ExternalDependencies.cmake (#2390)

This should fix the old dependencies which where asking for minimum
cmake of < 3.5

---------

Co-authored-by: XLiZHI <958689657@qq.com>

Update stats-30s.txt

Update stats-300s.txt

Update stats-600s.txt

[Cov & Sol] Coverage support for Solidity (#2389)

[Solidity] Upgrade the AST merging algorithm for multiple files (#2392)

[Coverage] fix the covergae algorithm (#2365)

[python-frontend] Reuse C libm models for NumPy math functions (#2395)

[solidity] create unique temp file to prevent races (#2396)

[Solidity] Support Unit keywords && insufficient balance checks (#2393)

[Solidity] function call with options (#2398)

Update test.desc

[data-races-check] get rid of static analysis (#2399)

[Solidity] Fix function order bug in AST merge (#2400)

[solidity] fix regression (#2402)

Fix windows build (#2403)

[build] update ESBMC version

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

Update Release Notes for ESBMC v7.9 (#2404)

[python] Fix unary negation (#2406)

Update stats-30s.txt

[Solidity] add support for several keywords and update modelling algorithm (#2405)

[python] Expand numpy math models (#2407)

Reusing C models for floor, fabs, sin and exp.

[goto-programs] ESBMC Overflow Intrinsic Support (#2408)

Fixes rafaelsamenezes/goto-transcoder#2.

This PR implements intrinsic functions in ESBMC that perform arithmetic
operations with overflow detection. These intrinsics are designed to
return both the result of the operation and a flag indicating whether
overflow occurred, similar to `__builtin_*_overflow` in GCC/Clang.

---

| Intrinsic | Operation | Description |
|-----------|-----------|-------------|
| `__ESBMC_overflow_result_plus(a, b)` | `a + b` | Addition with
overflow check |
| `__ESBMC_overflow_result_minus(a, b)` | `a - b` | Subtraction with
overflow check |
| `__ESBMC_overflow_result_mult(a, b)` | `a * b` | Multiplication with
overflow check |
| `__ESBMC_overflow_result_shl(a, b)` | `a << b` | Shift-left with
overflow check |
| `__ESBMC_overflow_result_unary_minus(a)` | `-a` | Unary negation with
overflow check |

---

Each intrinsic returns a structure:

```c
struct __ESBMC_overflow_result {
  bool overflow;
  T result;
};

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>

Update stats-300s.txt

Update stats-30s.txt

[C++ verification] fix std::find function (#2410)

[Solidity] Bug fix (#2409)

Update README.md

[goto-programs] refactored do_function_call_symbol (#2411)

[regression] added test case for casting

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] added test case for casting

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] enabled test case

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] disabled test case

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

Update CREDITS

Update CREDITS

[python-frontend] Handling list slicing (#2414)

[python] check for float and str comparisons

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

Apply automatic changes

[python] improved report about the TypeError location

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

Apply automatic changes

[regression] added test case for casting

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] added test cases for casting

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] fixed regular expression

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] fixed regular expression

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[Python]  add chr() built-in function support (#2416)

This PR introduces support for Python’s built-in chr() function in the
ESBMC Python frontend. The chr() function takes an integer and returns a
one-character string corresponding to the ASCII code of that integer.

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>

[python] fixed range check

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[python] refactor our python frontend and extend chr() and float() built-in functions (#2417)

This PR enhances the ESBMC Python frontend by improving support for
built-in type-casting functions, particularly `chr()` and `float()`, and
refining type handling across expressions. It introduces better error
detection, stricter type enforcement, and new regression tests to
validate behavior.

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>

Fix default variable implementation (#2418)

[python] Add support for hex() built-in function (#2419)

[python] Handle string comparison for != operator (#2420)

[python] add support for python's oct() built-in function (#2421)

This PR extends ESBMC’s Python frontend to support the built-in `oct()`
function, which converts integers to their octal string representation
(e.g., oct(8) → "0o10", oct(-9) → "-0o11"). It adds implementation and
regression tests to ensure correct behavior for successful and failing
cases.

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>

[util] removed header

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

Update README.md

Update README.md

Update README.md

[python] Handle ord(): convert single-character string to integer Unicode code point (#2423)

This PR implements the `ord()` built-in function as described in the
Python documentation
(https://docs.python.org/3/library/functions.html#ord):

_"Given a string representing one Unicode character, return an integer
representing the Unicode code point of that character. For example,
ord('a') returns the integer 97 and ord('€') (Euro sign) returns 8364.
This is the inverse of
[chr()](https://docs.python.org/3/library/functions.html#chr)."_

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>

[C++ verification] update operational models (#2424)

[python] Support python true division semantics (/) with float type coercion (#2425)

This PR supports the Python frontend for correctly handling Python’s
true division operator (/) in mixed-type arithmetic, particularly when
the result is assigned to a float-annotated variable. It ensures that
integer operands are type-coerced to floatbv (IEEE floating-point type)
when necessary.

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>

[python] Improved inference to handle true division (/) operator (#2426)

[python] add support for str(float) conversion (#2427)

[python] support for int() and float() conversion for symbols (#2429)

This PR enhances our Python frontend by supporting Python-style int()
and float() conversions on symbolic variables holding string values.

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>

[cmake] enable precompile headers for gcc (#2428)

[symex] Support for CPROVER R_OK (#2431)

Fixes #2430 (comment).

This PR introduces the `__ESBMC_r_ok` intrinsic to ESBMC's symbolic
execution engine. This function enables users to verify that a memory
read of a specified length from a given address stays within the bounds
of the allocated object, improving ESBMC’s ability to check low-level
memory safety.

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>

[CI] add static CHERI llvm17 build (#2432)

[regression] added test case for division

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[python] fixed log warning

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[python] added test case for true division

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

update test.desc (#2433)

[python] Refactor get_binary_operator_expr (#2434)

[python] fixed log_warning

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] extended numpy test case for math

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] extended numpy test case for fabs

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[python] add support for numpy.fabs() (#2435)

This PR implements support for `numpy.fabs()` function using a native
`fabs` implementation in `libm`. It also improves error handling and
diagnostics for unsupported NumPy calls in the Python frontend.

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>

[CI] update llvm-16 for windows (#2436)

[python] added test cases for numpy math functions (#2437)

[regression] enabled test case for exp numpy function

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] added test case for Euler constant

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] enabled test case for exp numpy function

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[libm] fix acos function (#2442)

fix #2439

![image](https://github.com/user-attachments/assets/5a239593-ac87-45c1-9043-4ef72a8e720b)
https://en.wikipedia.org/wiki/Inverse_trigonometric_functions

Update README.md

Update README.md

[solidity] fix reentry attack checks (#2422)

This PR
- fix reentry checks algo
- fix inheritance
- fix contract address assignment

---------

Co-authored-by: hejueyun2 <hejueyun@gmail.com>

Update stats-30s.txt

[python]  add support and error checking for Python abs() builtin function (#2441)

This PR evaluates the abs() builtin for constant and symbolic numeric
types. It also rejects invalid types (e.g., str, list, etc.) with
appropriate TypeError messages. Lastly,, it adds test cases to validate
valid and invalid uses of abs().

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>

Update README.md

[regression] add test cases for divison by zero function

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

Update README.md

[numpy] Add support for numpy.arccos() and some fixes (#2444)

Update README.md

[numpy] enhance numpy math function verification coverage (#2445)

This PR expands the regression test suite for various NumPy mathematical
functions, improves verification accuracy, and addresses known edge
cases.

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>

Update README.md

[regression] added test case for function call

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] added test case for function call

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

Fix bounds computation for multi-dimensional arrays (#2446)

Fixes #2440

Update stats-300s.txt

Update README.md

Update README.md

Update stats-30s.txt

Update README.md

[regression] added test case for ethereum bug

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[numpy] added integer_squareroot test case

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[numpy] added integer_squareroot test case

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[OM] Fix warning messages for pthread and setjmp models (#2448)

[OM] removed unnecessary typecast

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

Update README.md

Update README.md

Update README.md

Update README.md

[Solidity] Add support for the library entity (#2394)

The purpose of this pull request is to add support for the "library" in
Solidity.

Update stats-30s.txt

[concurrency] : add support for pthread_cleanup_push and pthread_cleanup_pop (#2450)

[regression] added test cases for pthread cleanup

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[python]  Set location for the conditional statement (#2453)

Fixes #2452.

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

Update BUILDING.md (#2454)

Update some build instructions

[pthread] push/pop must match

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

Update stats-30s.txt

[pthread] improved comment for assertion

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] added more test cases for chained comparisons

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[Python] Extend support for compound assignment statements (#2458)

This PR extends our Python frontend to parse, type check, and translate
compound assignment statements (e.g., x += 1, y /= 2) into GOTO code. It
includes frontend code changes and regression test cases to ensure
correctness and detect corner-case failures such as division by zero and
improper type propagation.

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>

[python] Handling NumPy dot product (#2460)

This PR adds C model infrastructure to compute [dot
product](https://numpy.org/doc/stable/reference/generated/numpy.dot.html#numpy.dot)
of arrays.

---------

Co-authored-by: brcfarias <1334363+brcfarias@users.noreply.github.com>

[python] build symbolic multiplication tree for power/pow functions (#2462)

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>

[python] improved comment for handle_power_operator

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] added test cases in Python for while

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] added test cases in Python for function call

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] added test cases in Python for function call

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[python] Handle function calls used as arguments (#2465)

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>

[python] Improve abs() handling (#2466)

This PR enhances the Python frontend's `abs()` function handling to
detect and reject non-numeric arguments correctly, and to better infer
operand types. It addresses two previously undetected or misclassified
errors and adds supporting regression tests.

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>

[python-frontend] Handling array literals (#2467)

[regression] added test for function call + class

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] added test cases for pass in Python

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[python] Allow variables in NumPy math function calls (#2469)

[regression] added test cases for ceil in numpy

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

Update numpy.py

Update stats-300s.txt

[regression] added test cases for logican and in Python

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] added test cases for mod in Python

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] added test cases for range in Python

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[SMT solver] Updated Bitwuzla from v0.7.0 to v0.8.0 (#2472)

[python] improve range() handling (#2473)

[Solidity] Refactoring Mapping (#2468)

[python] Handling numpy functions (#2474)

[regression] added test cases for power in Python

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[symex] removed temporary fix for the condition coverage (#2477)

[python] improved support for power operator (**) (#2478)

Disabled broken solvers for benchexec CI (#2481)

Yices and Bitwuzla are not building on benchexec CI runs. The crashes
seems to be related to GMP.

Lets avoid it for now and enable again when it is working.

[C verification] Adjust the behavior of parameter checking for the unknown method (#2479)

Update README.md

[CHERI] support the verification of CHERI capability bounds (#2464)

[python] add support for unary+ operator

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[python] add support for unary+ operator

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[python] add support for unary+ operator

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[build] fix solvers gmp library link (#2483)

We have multiple solvers that depend on the gmp library at the same
time, perhaps putting the gmp lib link at the top level is better.

https://github.com/esbmc/esbmc/actions/runs/15322131655/job/43108043486

---------

Co-authored-by: Lucas C. Cordeiro <lucasccordeiro@gmail.com>

Update stats-30s.txt

[python] add support for bytes literals and indexing (#2484)

Revert "[build] fix solvers gmp library link" (#2485)

Reverts #2483

Revert "Revert "[build] fix solvers gmp library link"" (#2486)

Reverts #2485

[python] Add numpy.matmul (#2487)

Handling
[numpy.matmul](https://numpy.org/doc/stable/reference/generated/numpy.matmul.html)
calls.

[python] added tests for numpy det

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[python] added test cases for numpy dot

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[python] added test cases for numpy transpose

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[python] add support for Is and IsNot operators (#2480)

Update stats-300s.txt

[python] add support for numpy.dot() with 1D and mixed-dimension arrays (#2489)

This PR extends our Python frontend to support additional `numpy.dot()`
operand combinations, enabling verification of vector and matrix dot
products across a wider range of dimensions.

- 1D × 1D → scalar
- 1D × 2D → 1D array
- 2D × 1D → 1D array
- 2D × 2D → 2D array (already supported)

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>

[python] simplified is operator (#2490)

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

Update README.md

[python] added test case for None

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[python]  support for "NoneType" (#2493)

This PR introduces support for "NoneType" in the type system,
represented by a pointer to void. The Python None value is now
internally represented as a null pointer (constant_exprt with
pointer_type and value "0"). Enhanced AST type inference to detect
various forms of None across Python versions (e.g., Constant,
NameConstant, and Name).

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>

[numpy] disallow 3D or higher-dimensional arrays (#2492)

Fixes #2491.

This PR introduces validation in the Python frontend to reject 3D or
higher-dimensional arrays. It includes a new regression test (dot8) to
verify that ESBMC correctly throws an error when such input is provided.

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>

[python] improved return type inference (#2494)

This PR enhances our Python frontend’s ability to infer function return
types in ESBMC by improving logic in
`python_annotation::get_function_return_type`. It adds support for
parsing and handling annotated and inferred return types from Python AST
nodes.

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>
Co-authored-by: Bruno Farias <brunocarvalhofarias@gmail.com>

[regression] Show warning when KNOWNBUG tests stop failing (#2496)

**Before:**

![image](https://github.com/user-attachments/assets/9c35d422-2b50-43f1-9a1f-70a5999b5165)

**Now:**

![image](https://github.com/user-attachments/assets/87b665d1-42f8-4d36-af91-54b6a9c8de78)

CPROVER migration compatibility (#2443)

In this PR I am introducing ireps that were originated from CBMC into
the migration. However, I am focusing on implementing them as intrinsic
function calls. As we can then test the behavior using C files.

This is still a draft as it requires:
- [x] ~There is a bug in the transcoder that is making the pop_frame
assertion break.~ Applying same hack as coverage.
- [X] ~Overflow-result needs to invoke our intrinsic function.~ Can't
apply late goto transformations.
- [X]  ~r_ok intrinsic. ~ Will fix in another PR
- [X] .goto testcases need to be constructed from CBMC and then adapted
to ESBMC format (using goto-transcoder).
- [x] ~Export header of ESBMC. This is a C file including all the
intrinsic function signatures, this is meant to be exported as a .goto
file.~ Testing utilities will be ported to utils (#2476).

---------

Co-authored-by: Rafael Sá Menezes <rafael.sa.menezes40@gmail.com>
Co-authored-by: rafaelsamenezes <8601807+rafaelsamenezes@users.noreply.github.com>

[built-in] model builtin clzll using constraints  (#2501)

This is a PR of an attempt to model a builtin function with assumptions

The algorithm is as follows:
```
1. nondet symbol clz_sym(uint64)
2. assert(x != 0)
3. assume(0 ≤ clz_sym ≤ 63)
4. idx = 63 - clz_sym
5. assume(((x >> idx) & 1) != 0)
6. assume((x >> (idx+1)) == 0)
7. return (int)clz_sym
```

[python] enhanced string comparison handling (#2497)

This PR introduces a significant enhancement to the Python frontend's
handling of string comparisons, specifically improving the accuracy and
robustness of equality checks involving string-returning functions. It
adds new logic for constant resolution and identity function detection
and expands regression test coverage with various string manipulation
scenarios.

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>

[smt] don't access vector out of bounds (#2502)

`reserve` only changes the capacity, but not the size.
After `args.reserve(20)`, `args[10]` would still fail.
The loop that initialized all `args` has been changed to use push_back
instead of indices.
The few cases that later tried to write to e.g. `args[0]` where there
was previously no value written to `args[0]` have been changed to now do
the write.

Alternative to #2498

Co-authored-by: intrigus <abc123zeus@live.de>

[python] Handle string annotations like -> int (#2495)

Update stats-30s.txt

[goto-programs] add validation for invalid member accesses on incomplete or incorrectly typed expressions (Fixes #2236) (#2500)

[python] check for sideeffect in is_zero_length_array

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[python] avoid string comparison with sideeffects

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[python] added test cases for ternary operator

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

Update stats-30s.txt

[regression] added test case for overflow/nan

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

Update README.md

Update README.md

Update README.md

[CHERI] hide compressed/decompressed trace (#2504)

The counterexample becomes cleaner

[python] enhanced handling of true division (#2505)

This PR introduces several enhancements to the ESBMC Python frontend
(`python_converter.cpp`) to more accurately model Python semantics for
true division (/).

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>

Update README.md

[python] implement pow symbolically (#2506)

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>

[regression] removed --incremental-bmc

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

Update stats-600s.txt

[python] add support for python built-in function handling (#2507)

[regression] added test case from #1599

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] added test case from #1599

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] removed test case

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[python] add support for transforming general python for loops over iterables  (#2508)

[regression] added test case for Python class

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] improved test case

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[python] Fix compound assignment on object attributes (#2509)

[python] added test case for assert stmt

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] added test case for class

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[python] handles assertions involving function calls and refactor attribute handling (#2510)

[python] added test case for class

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] added test case for realloc

[CI] Integrate cheribsd-riscv64 system root (#2447)

The build on GitHub runner using cheribuild took too long and exceeded
the runner's hard disk capacity.

Currently I have uploaded the cheribsd SDK built locally and hope it
works as expected. ;)

[regression] added test case for realloc

[c++] added test case for vector

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[cpp] resolve mismatch template deduction errors with pointer types (#2517)

[cpp] add support for std::is_sorted and improve vector initialization (#2515)

[c++] implement missing ostreambuf_iterator methods for STL algorithm support (#2519)

[cpp] Fix vector const_reverse_iterator implementation for reverse iteration support (#2520)

Implement the `const_reverse_iterator` class with conversion
constructors and operators derived from `reverse_iterator`. Add missing
`const rbegin()/rend()` method implementations.

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[c++] fix map::insert() to accept temporary pair objects (#2521)

This PR changes `map::insert(value_type &val)` to `map::insert(const
value_type &val)` to allow binding to rvalue references. This fixes
compilation errors when inserting temporary pair objects such as
`mymap.insert(pair<char,int>('a', 100));`.

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[c++] fix multiset constructor ambiguity (#2522)

[c++] fix deque iterator increment operators binding to temporary (#2523)

[c++] fix npos handling (#2525)

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[c++] fix iterator assignment operators (#2526)

[goto-symex] use size directly (#2516)

[c++] add explicit int overload for list::insert and replace invalid null check in remove_if (#2527)

[c++] fix STL operator overload resolution errors in ostream, sstream and string headers (#2528)

[c++] add basic unordered_set support (#2529)

[solidity] improve overall performance (#2511)

```sh
Over 5 mins
esbmc --sol example.sol example.solast --incremental-bmc --no-standard-checks  1.90s user 0.19s system 64% cpu 3.255 total

Over 5 mins
esbmc --sol example.sol example.solast --contract Reproduction     4.13s user 0.20s system 80% cpu 5.384 total
```

![image](https://github.com/user-attachments/assets/f387cf4a-b3a6-4163-8aa7-d8594ce6bc95)

now the whole regression test can be finished in 120 second (-j 8)
---

This PR also contains some bug fixing, including library API
(_max/_min), address binding in trusted mode

---------

Co-authored-by: hejueyun2 <hejueyun@gmail.com>

[c++] added basic std::unordered_map support (#2530)

This PR introduces initial support for `std::unordered_map` in our C++
model, along with corresponding regression tests to validate its
correctness and error detection capabilities. The support includes a
simplified internal implementation suitable for bounded model checking,
and test cases to ensure expected behavior.

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[c++] removed esbmc_forward_iterator_tag

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] added test cases for Python range

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

Consider the guard when dealing with sideeffects (#2514)

This is one of the known problems:

1. The current guard needs to be taken into account when dealing with
memory allocation, especially in if expressions.
2. There is something wrong with our realloc operation that causes out
of bound. This is because we only adjust the bound in the track new
pointer, while nothing changes in the dynamic object. I tried to modify
the symbol directly, but at the SMT level there was a bit width
mismatch.

Should we rethink the implementation of realloc, perhaps malloc and
memcpy would be a good approach instead?

[c++] added test case for vector

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[C++ verification] Add a new implementation of typeid (#2534)

The type of polymorphism needs to be fetched at runtime, which is not
handled by the frontend, so for now we skip it for preliminary support.

The TC in this PR reflects all currently supported methods.

[c++] fix vector default constructor: remove explicit keyword (#2535)

[regression] reduced verification time for insert2_fail

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] reduced verification time for emplace_fail

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] added test cases for vector

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[c++] add allocator template parameter to std::vector (#2536)

Update main.cpp

[c++] applied coding style to vector

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[c++] add deterministic hash specializations for std::hash (#2538)

[python] added test case for range

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

Address incosistent behaviour in dump_smt function across solvers (#2524)

Updated the z3_convt::output_smt() and the bitwulza_convt::dump_smt()
functions to print
to stdout when no output was defined

Improved the handling of empty and "-" output paths in the
smtlib_conv::dump_smt() function

Addressed issue #2167

---------

Signed-off-by: mihaistate05 <mihaita.state@yahoo.com>
Signed-off-by: mihaistate <mihai.state03@yahoo.com>
Signed-off-by: mihaistate05 <mihai.state03@yahoo.com>
Co-authored-by: mihaistate05 <mihaita.state@yahoo.com>

[CI] improve auto commit (#2540)

Improve the code style check CI:

Only branches in the ESBMC repository will trigger the auto commit,
because git commit does not have permission to modify other
repositories.

Otherwise, we show the corresponding code, throw an error.

Update stats-300s.txt

Update stats-30s.txt
mihaistate added a commit that referenced this pull request Jun 27, 2025
Created a new memcpy function that copies 8 bytes
per iteration
The if statement checks that both dst and src pointers are
8-byte aligned. If they are, it copies 8 bytes of memory
using uint64_t pointers for efficiency. Remaining bytes are
handled in a trailing byte loop.
If the pointers are not 8-bytes aligned, the function falls back
to a safe byte-by-byte copy.

Signed-off-by: mihaistate05 <mihai.state03@yahoo.com>

[TC] add variant of github_60 test (#2362)

Make TC from #1175 compatible with windows (#2361)

[TC] add TC from #1290 (#2359)

Update README.md

Update README.md

[Z3] Support bitwise for integer arithmetic (#2354)

This PR refactors our bitwise operations handling and enhances our SMT
conversion functions to better support integer and boolean types. In
particular, it introduces more consistent handling for boolean and
integer types and improves compatibility with the Z3 solver's bit-vector
operations.
- [X] bitnot_id
- [X] bitxor_id
- [x] bitand_id
- [x] bitor_id
- [x] bitnand_id
- [x] bitnor_id
- [x] bitnxor_id

This PR (30s):

````
Statistics:          33569 Files
  correct:           18073
    correct true:    10743
    correct false:    7330
  incorrect:            40
    incorrect true:     13
    incorrect false:    27
  unknown:           15456
  Score:             27968 (max: 55885)

https://github.com/esbmc/esbmc/actions/runs/13956944037
````

Master (30s):

````
Statistics:          33569 Files
  correct:           18075
    correct true:    10743
    correct false:    7332
  incorrect:            40
    incorrect true:     13
    incorrect false:    27
  unknown:           15454
  Score:             27970 (max: 55885)

https://github.com/esbmc/esbmc/actions/runs/13906715936
````

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>

Update README.md

Update README.md

[C verification] remove nonexistent function (#2358)

Fixes #2355.

nand() doesn't actually exist in the standard C library; the <math.h>
header only defines nan(), nanf(), and nanl().

We introduced a new function : -)

Update README.md

Update stats-600s.txt

[cmake] update MathSAT download link (#2370)

The master version fails as:

````
Downloading Mathsat
-- Downloading MATHSAT from https://mathsat.fbk.eu/download.php?file=mathsat-5.6.10-linux-x86_64.tar.gz
-- Extracting MATHSAT
CMake Error at src/solvers/mathsat/CMakeLists.txt:20 (message):
  Could not find mathsat include headers, please check Mathsat_DIR
````

This PR adds the new download link MathSAT: for
https://mathsat.fbk.eu/release/mathsat-5.6.11-linux-x86_64.tar.gz.

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

Update README.md

[Overflow] Added overflow_cast to support integer overflow detection (#2367)

Fixes #2357.

This PR extends the `overflow_cast` method in ESBMC to handle integer
arithmetic typecast overflow detection.

Key Changes:
- Checks for signed and unsigned typecast overflow in integer
arithmetic.
- Handles cases where values exceed the target type’s range

This PR (30s):

````
Statistics:          33569 Files
  correct:           18079
    correct true:    10747
    correct false:    7332
  incorrect:            40
    incorrect true:     13
    incorrect false:    27
  unknown:           15450
  Score:             27978 (max: 55885)

https://github.com/esbmc/esbmc/actions/runs/14016741212
````

Master (30s):

````
Statistics:          33569 Files
  correct:           18075
    correct true:    10743
    correct false:    7332
  incorrect:            40
    incorrect true:     13
    incorrect false:    27
  unknown:           15454
  Score:             27970 (max: 55885)

https://github.com/esbmc/esbmc/actions/runs/13906715936
````

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>

Update stats-30s.txt

[memory-leak] Track global memory (#2372)

This PR fixes #2335.

Here, 'g' acts as a guard condition, determining whether 'e' should be
considered. 'same_object2tc(obj, e)' checks if 'obj' and 'e' refer to
the same object; if 'g' is an AND condition (is_and2t) or already a
same-object check (is_same_object2t), then 'g' is combined; otherwise,
we directly use 'same_object2tc(obj, e).'

This PR (30s):

````
Statistics:          33569 Files
  correct:           18077
    correct true:    10751
    correct false:    7326
  incorrect:            36
    incorrect true:     13
    incorrect false:    23
  unknown:           15456
  Score:             28044 (max: 55885)

https://github.com/esbmc/esbmc/actions/runs/14046421617
````

Master (30s):

````
Statistics:          33569 Files
  correct:           18079
    correct true:    10747
    correct false:    7332
  incorrect:            40
    incorrect true:     13
    incorrect false:    27
  unknown:           15450
  Score:             27978 (max: 55885)

https://github.com/esbmc/esbmc/actions/runs/14016741212
````

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>

Update stats-30s.txt

Update stats-300s.txt

[overflow] check typecast overflow for signed and unsigned int only (#2376)

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[overflow] use resolved_type instead

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

Update stats-300s.txt

[Solidity] fix address modelling (#2379)

[OM] Refactoring our C++ operational models: functional (#2381)

[python-frontend] Model for numpy.ceil (#2382)

- Add operational model for
[numpy.ceil](https://numpy.org/doc/stable/reference/generated/numpy.ceil.html#numpy.ceil).
- Fix handling of negative numbers in lists.

---------

Co-authored-by: brcfarias <1334363+brcfarias@users.noreply.github.com>

[Z3] Fix overflow detection for signed subtraction and unsigned division and modulus (#2383)

Update README.md

[overflow] removed unused variable

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

Update stats-30s.txt

[sv-comp] increase context-switch to 3 (#2378)

This PR (900s):

````
Statistics:           3179 Files
  correct:            1814
    correct true:     1360
    correct false:     454
  incorrect:            40
    incorrect true:     23
    incorrect false:    17
  unknown:            1325
  Score:              2166 (max: 5725)

https://github.com/esbmc/esbmc/actions/runs/14191126275
````

Master (900s):

````
Statistics:           3179 Files
  correct:            1843
    correct true:     1409
    correct false:     434
  incorrect:            61
    incorrect true:     43
    incorrect false:    18
  unknown:            1275
  Score:              1588 (max: 5725)

https://github.com/esbmc/esbmc/actions/runs/14191018069
````

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[Concurrency] unified data race flag (#2385)

This PR (900s):
```
Statistics:           1029 Files
  correct:             530
    correct true:      415
    correct false:     115
  incorrect:            21
    incorrect true:     14
    incorrect false:     7
  unknown:             478
  Score:               385 (max: 1823)

https://github.com/esbmc/esbmc/actions/runs/14193032102
```

Master (900s):
```
Statistics:           1029 Files
  correct:             565
    correct true:      449
    correct false:     116
  incorrect:            24
    incorrect true:     18
    incorrect false:     6
  unknown:             440
  Score:               342 (max: 1823)

https://github.com/esbmc/esbmc/actions/runs/14193024857
```

Update ExternalDependencies.cmake (#2390)

This should fix the old dependencies which where asking for minimum
cmake of < 3.5

---------

Co-authored-by: XLiZHI <958689657@qq.com>

Update stats-30s.txt

Update stats-300s.txt

Update stats-600s.txt

[Cov & Sol] Coverage support for Solidity (#2389)

[Solidity] Upgrade the AST merging algorithm for multiple files (#2392)

[Coverage] fix the covergae algorithm (#2365)

[python-frontend] Reuse C libm models for NumPy math functions (#2395)

[solidity] create unique temp file to prevent races (#2396)

[Solidity] Support Unit keywords && insufficient balance checks (#2393)

[Solidity] function call with options (#2398)

Update test.desc

[data-races-check] get rid of static analysis (#2399)

[Solidity] Fix function order bug in AST merge (#2400)

[solidity] fix regression (#2402)

Fix windows build (#2403)

[build] update ESBMC version

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

Update Release Notes for ESBMC v7.9 (#2404)

[python] Fix unary negation (#2406)

Update stats-30s.txt

[Solidity] add support for several keywords and update modelling algorithm (#2405)

[python] Expand numpy math models (#2407)

Reusing C models for floor, fabs, sin and exp.

[goto-programs] ESBMC Overflow Intrinsic Support (#2408)

Fixes rafaelsamenezes/goto-transcoder#2.

This PR implements intrinsic functions in ESBMC that perform arithmetic
operations with overflow detection. These intrinsics are designed to
return both the result of the operation and a flag indicating whether
overflow occurred, similar to `__builtin_*_overflow` in GCC/Clang.

---

| Intrinsic | Operation | Description |
|-----------|-----------|-------------|
| `__ESBMC_overflow_result_plus(a, b)` | `a + b` | Addition with
overflow check |
| `__ESBMC_overflow_result_minus(a, b)` | `a - b` | Subtraction with
overflow check |
| `__ESBMC_overflow_result_mult(a, b)` | `a * b` | Multiplication with
overflow check |
| `__ESBMC_overflow_result_shl(a, b)` | `a << b` | Shift-left with
overflow check |
| `__ESBMC_overflow_result_unary_minus(a)` | `-a` | Unary negation with
overflow check |

---

Each intrinsic returns a structure:

```c
struct __ESBMC_overflow_result {
  bool overflow;
  T result;
};

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>

Update stats-300s.txt

Update stats-30s.txt

[C++ verification] fix std::find function (#2410)

[Solidity] Bug fix (#2409)

Update README.md

[goto-programs] refactored do_function_call_symbol (#2411)

[regression] added test case for casting

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] added test case for casting

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] enabled test case

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] disabled test case

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

Update CREDITS

Update CREDITS

[python-frontend] Handling list slicing (#2414)

[python] check for float and str comparisons

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

Apply automatic changes

[python] improved report about the TypeError location

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

Apply automatic changes

[regression] added test case for casting

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] added test cases for casting

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] fixed regular expression

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] fixed regular expression

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[Python]  add chr() built-in function support (#2416)

This PR introduces support for Python’s built-in chr() function in the
ESBMC Python frontend. The chr() function takes an integer and returns a
one-character string corresponding to the ASCII code of that integer.

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>

[python] fixed range check

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[python] refactor our python frontend and extend chr() and float() built-in functions (#2417)

This PR enhances the ESBMC Python frontend by improving support for
built-in type-casting functions, particularly `chr()` and `float()`, and
refining type handling across expressions. It introduces better error
detection, stricter type enforcement, and new regression tests to
validate behavior.

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>

Fix default variable implementation (#2418)

[python] Add support for hex() built-in function (#2419)

[python] Handle string comparison for != operator (#2420)

[python] add support for python's oct() built-in function (#2421)

This PR extends ESBMC’s Python frontend to support the built-in `oct()`
function, which converts integers to their octal string representation
(e.g., oct(8) → "0o10", oct(-9) → "-0o11"). It adds implementation and
regression tests to ensure correct behavior for successful and failing
cases.

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>

[util] removed header

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

Update README.md

Update README.md

Update README.md

[python] Handle ord(): convert single-character string to integer Unicode code point (#2423)

This PR implements the `ord()` built-in function as described in the
Python documentation
(https://docs.python.org/3/library/functions.html#ord):

_"Given a string representing one Unicode character, return an integer
representing the Unicode code point of that character. For example,
ord('a') returns the integer 97 and ord('€') (Euro sign) returns 8364.
This is the inverse of
[chr()](https://docs.python.org/3/library/functions.html#chr)."_

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>

[C++ verification] update operational models (#2424)

[python] Support python true division semantics (/) with float type coercion (#2425)

This PR supports the Python frontend for correctly handling Python’s
true division operator (/) in mixed-type arithmetic, particularly when
the result is assigned to a float-annotated variable. It ensures that
integer operands are type-coerced to floatbv (IEEE floating-point type)
when necessary.

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>

[python] Improved inference to handle true division (/) operator (#2426)

[python] add support for str(float) conversion (#2427)

[python] support for int() and float() conversion for symbols (#2429)

This PR enhances our Python frontend by supporting Python-style int()
and float() conversions on symbolic variables holding string values.

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>

[cmake] enable precompile headers for gcc (#2428)

[symex] Support for CPROVER R_OK (#2431)

Fixes #2430 (comment).

This PR introduces the `__ESBMC_r_ok` intrinsic to ESBMC's symbolic
execution engine. This function enables users to verify that a memory
read of a specified length from a given address stays within the bounds
of the allocated object, improving ESBMC’s ability to check low-level
memory safety.

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>

[CI] add static CHERI llvm17 build (#2432)

[regression] added test case for division

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[python] fixed log warning

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[python] added test case for true division

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

update test.desc (#2433)

[python] Refactor get_binary_operator_expr (#2434)

[python] fixed log_warning

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] extended numpy test case for math

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] extended numpy test case for fabs

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[python] add support for numpy.fabs() (#2435)

This PR implements support for `numpy.fabs()` function using a native
`fabs` implementation in `libm`. It also improves error handling and
diagnostics for unsupported NumPy calls in the Python frontend.

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>

[CI] update llvm-16 for windows (#2436)

[python] added test cases for numpy math functions (#2437)

[regression] enabled test case for exp numpy function

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] added test case for Euler constant

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] enabled test case for exp numpy function

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[libm] fix acos function (#2442)

fix #2439

![image](https://github.com/user-attachments/assets/5a239593-ac87-45c1-9043-4ef72a8e720b)
https://en.wikipedia.org/wiki/Inverse_trigonometric_functions

Update README.md

Update README.md

[solidity] fix reentry attack checks (#2422)

This PR
- fix reentry checks algo
- fix inheritance
- fix contract address assignment

---------

Co-authored-by: hejueyun2 <hejueyun@gmail.com>

Update stats-30s.txt

[python]  add support and error checking for Python abs() builtin function (#2441)

This PR evaluates the abs() builtin for constant and symbolic numeric
types. It also rejects invalid types (e.g., str, list, etc.) with
appropriate TypeError messages. Lastly,, it adds test cases to validate
valid and invalid uses of abs().

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>

Update README.md

[regression] add test cases for divison by zero function

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

Update README.md

[numpy] Add support for numpy.arccos() and some fixes (#2444)

Update README.md

[numpy] enhance numpy math function verification coverage (#2445)

This PR expands the regression test suite for various NumPy mathematical
functions, improves verification accuracy, and addresses known edge
cases.

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>

Update README.md

[regression] added test case for function call

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] added test case for function call

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

Fix bounds computation for multi-dimensional arrays (#2446)

Fixes #2440

Update stats-300s.txt

Update README.md

Update README.md

Update stats-30s.txt

Update README.md

[regression] added test case for ethereum bug

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[numpy] added integer_squareroot test case

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[numpy] added integer_squareroot test case

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[OM] Fix warning messages for pthread and setjmp models (#2448)

[OM] removed unnecessary typecast

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

Update README.md

Update README.md

Update README.md

Update README.md

[Solidity] Add support for the library entity (#2394)

The purpose of this pull request is to add support for the "library" in
Solidity.

Update stats-30s.txt

[concurrency] : add support for pthread_cleanup_push and pthread_cleanup_pop (#2450)

[regression] added test cases for pthread cleanup

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[python]  Set location for the conditional statement (#2453)

Fixes #2452.

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

Update BUILDING.md (#2454)

Update some build instructions

[pthread] push/pop must match

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

Update stats-30s.txt

[pthread] improved comment for assertion

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] added more test cases for chained comparisons

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[Python] Extend support for compound assignment statements (#2458)

This PR extends our Python frontend to parse, type check, and translate
compound assignment statements (e.g., x += 1, y /= 2) into GOTO code. It
includes frontend code changes and regression test cases to ensure
correctness and detect corner-case failures such as division by zero and
improper type propagation.

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>

[python] Handling NumPy dot product (#2460)

This PR adds C model infrastructure to compute [dot
product](https://numpy.org/doc/stable/reference/generated/numpy.dot.html#numpy.dot)
of arrays.

---------

Co-authored-by: brcfarias <1334363+brcfarias@users.noreply.github.com>

[python] build symbolic multiplication tree for power/pow functions (#2462)

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>

[python] improved comment for handle_power_operator

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] added test cases in Python for while

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] added test cases in Python for function call

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] added test cases in Python for function call

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[python] Handle function calls used as arguments (#2465)

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>

[python] Improve abs() handling (#2466)

This PR enhances the Python frontend's `abs()` function handling to
detect and reject non-numeric arguments correctly, and to better infer
operand types. It addresses two previously undetected or misclassified
errors and adds supporting regression tests.

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>

[python-frontend] Handling array literals (#2467)

[regression] added test for function call + class

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] added test cases for pass in Python

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[python] Allow variables in NumPy math function calls (#2469)

[regression] added test cases for ceil in numpy

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

Update numpy.py

Update stats-300s.txt

[regression] added test cases for logican and in Python

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] added test cases for mod in Python

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] added test cases for range in Python

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[SMT solver] Updated Bitwuzla from v0.7.0 to v0.8.0 (#2472)

[python] improve range() handling (#2473)

[Solidity] Refactoring Mapping (#2468)

[python] Handling numpy functions (#2474)

[regression] added test cases for power in Python

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[symex] removed temporary fix for the condition coverage (#2477)

[python] improved support for power operator (**) (#2478)

Disabled broken solvers for benchexec CI (#2481)

Yices and Bitwuzla are not building on benchexec CI runs. The crashes
seems to be related to GMP.

Lets avoid it for now and enable again when it is working.

[C verification] Adjust the behavior of parameter checking for the unknown method (#2479)

Update README.md

[CHERI] support the verification of CHERI capability bounds (#2464)

[python] add support for unary+ operator

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[python] add support for unary+ operator

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[python] add support for unary+ operator

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[build] fix solvers gmp library link (#2483)

We have multiple solvers that depend on the gmp library at the same
time, perhaps putting the gmp lib link at the top level is better.

https://github.com/esbmc/esbmc/actions/runs/15322131655/job/43108043486

---------

Co-authored-by: Lucas C. Cordeiro <lucasccordeiro@gmail.com>

Update stats-30s.txt

[python] add support for bytes literals and indexing (#2484)

Revert "[build] fix solvers gmp library link" (#2485)

Reverts #2483

Revert "Revert "[build] fix solvers gmp library link"" (#2486)

Reverts #2485

[python] Add numpy.matmul (#2487)

Handling
[numpy.matmul](https://numpy.org/doc/stable/reference/generated/numpy.matmul.html)
calls.

[python] added tests for numpy det

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[python] added test cases for numpy dot

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[python] added test cases for numpy transpose

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[python] add support for Is and IsNot operators (#2480)

Update stats-300s.txt

[python] add support for numpy.dot() with 1D and mixed-dimension arrays (#2489)

This PR extends our Python frontend to support additional `numpy.dot()`
operand combinations, enabling verification of vector and matrix dot
products across a wider range of dimensions.

- 1D × 1D → scalar
- 1D × 2D → 1D array
- 2D × 1D → 1D array
- 2D × 2D → 2D array (already supported)

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>

[python] simplified is operator (#2490)

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

Update README.md

[python] added test case for None

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[python]  support for "NoneType" (#2493)

This PR introduces support for "NoneType" in the type system,
represented by a pointer to void. The Python None value is now
internally represented as a null pointer (constant_exprt with
pointer_type and value "0"). Enhanced AST type inference to detect
various forms of None across Python versions (e.g., Constant,
NameConstant, and Name).

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>

[numpy] disallow 3D or higher-dimensional arrays (#2492)

Fixes #2491.

This PR introduces validation in the Python frontend to reject 3D or
higher-dimensional arrays. It includes a new regression test (dot8) to
verify that ESBMC correctly throws an error when such input is provided.

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>

[python] improved return type inference (#2494)

This PR enhances our Python frontend’s ability to infer function return
types in ESBMC by improving logic in
`python_annotation::get_function_return_type`. It adds support for
parsing and handling annotated and inferred return types from Python AST
nodes.

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>
Co-authored-by: Bruno Farias <brunocarvalhofarias@gmail.com>

[regression] Show warning when KNOWNBUG tests stop failing (#2496)

**Before:**

![image](https://github.com/user-attachments/assets/9c35d422-2b50-43f1-9a1f-70a5999b5165)

**Now:**

![image](https://github.com/user-attachments/assets/87b665d1-42f8-4d36-af91-54b6a9c8de78)

CPROVER migration compatibility (#2443)

In this PR I am introducing ireps that were originated from CBMC into
the migration. However, I am focusing on implementing them as intrinsic
function calls. As we can then test the behavior using C files.

This is still a draft as it requires:
- [x] ~There is a bug in the transcoder that is making the pop_frame
assertion break.~ Applying same hack as coverage.
- [X] ~Overflow-result needs to invoke our intrinsic function.~ Can't
apply late goto transformations.
- [X]  ~r_ok intrinsic. ~ Will fix in another PR
- [X] .goto testcases need to be constructed from CBMC and then adapted
to ESBMC format (using goto-transcoder).
- [x] ~Export header of ESBMC. This is a C file including all the
intrinsic function signatures, this is meant to be exported as a .goto
file.~ Testing utilities will be ported to utils (#2476).

---------

Co-authored-by: Rafael Sá Menezes <rafael.sa.menezes40@gmail.com>
Co-authored-by: rafaelsamenezes <8601807+rafaelsamenezes@users.noreply.github.com>

[built-in] model builtin clzll using constraints  (#2501)

This is a PR of an attempt to model a builtin function with assumptions

The algorithm is as follows:
```
1. nondet symbol clz_sym(uint64)
2. assert(x != 0)
3. assume(0 ≤ clz_sym ≤ 63)
4. idx = 63 - clz_sym
5. assume(((x >> idx) & 1) != 0)
6. assume((x >> (idx+1)) == 0)
7. return (int)clz_sym
```

[python] enhanced string comparison handling (#2497)

This PR introduces a significant enhancement to the Python frontend's
handling of string comparisons, specifically improving the accuracy and
robustness of equality checks involving string-returning functions. It
adds new logic for constant resolution and identity function detection
and expands regression test coverage with various string manipulation
scenarios.

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>

[smt] don't access vector out of bounds (#2502)

`reserve` only changes the capacity, but not the size.
After `args.reserve(20)`, `args[10]` would still fail.
The loop that initialized all `args` has been changed to use push_back
instead of indices.
The few cases that later tried to write to e.g. `args[0]` where there
was previously no value written to `args[0]` have been changed to now do
the write.

Alternative to #2498

Co-authored-by: intrigus <abc123zeus@live.de>

[python] Handle string annotations like -> int (#2495)

Update stats-30s.txt

[goto-programs] add validation for invalid member accesses on incomplete or incorrectly typed expressions (Fixes #2236) (#2500)

[python] check for sideeffect in is_zero_length_array

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[python] avoid string comparison with sideeffects

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[python] added test cases for ternary operator

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

Update stats-30s.txt

[regression] added test case for overflow/nan

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

Update README.md

Update README.md

Update README.md

[CHERI] hide compressed/decompressed trace (#2504)

The counterexample becomes cleaner

[python] enhanced handling of true division (#2505)

This PR introduces several enhancements to the ESBMC Python frontend
(`python_converter.cpp`) to more accurately model Python semantics for
true division (/).

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>

Update README.md

[python] implement pow symbolically (#2506)

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>
Co-authored-by: lucasccordeiro <3694109+lucasccordeiro@users.noreply.github.com>

[regression] removed --incremental-bmc

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

Update stats-600s.txt

[python] add support for python built-in function handling (#2507)

[regression] added test case from #1599

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] added test case from #1599

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] removed test case

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[python] add support for transforming general python for loops over iterables  (#2508)

[regression] added test case for Python class

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] improved test case

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[python] Fix compound assignment on object attributes (#2509)

[python] added test case for assert stmt

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] added test case for class

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[python] handles assertions involving function calls and refactor attribute handling (#2510)

[python] added test case for class

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] added test case for realloc

[CI] Integrate cheribsd-riscv64 system root (#2447)

The build on GitHub runner using cheribuild took too long and exceeded
the runner's hard disk capacity.

Currently I have uploaded the cheribsd SDK built locally and hope it
works as expected. ;)

[regression] added test case for realloc

[c++] added test case for vector

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[cpp] resolve mismatch template deduction errors with pointer types (#2517)

[cpp] add support for std::is_sorted and improve vector initialization (#2515)

[c++] implement missing ostreambuf_iterator methods for STL algorithm support (#2519)

[cpp] Fix vector const_reverse_iterator implementation for reverse iteration support (#2520)

Implement the `const_reverse_iterator` class with conversion
constructors and operators derived from `reverse_iterator`. Add missing
`const rbegin()/rend()` method implementations.

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[c++] fix map::insert() to accept temporary pair objects (#2521)

This PR changes `map::insert(value_type &val)` to `map::insert(const
value_type &val)` to allow binding to rvalue references. This fixes
compilation errors when inserting temporary pair objects such as
`mymap.insert(pair<char,int>('a', 100));`.

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[c++] fix multiset constructor ambiguity (#2522)

[c++] fix deque iterator increment operators binding to temporary (#2523)

[c++] fix npos handling (#2525)

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[c++] fix iterator assignment operators (#2526)

[goto-symex] use size directly (#2516)

[c++] add explicit int overload for list::insert and replace invalid null check in remove_if (#2527)

[c++] fix STL operator overload resolution errors in ostream, sstream and string headers (#2528)

[c++] add basic unordered_set support (#2529)

[solidity] improve overall performance (#2511)

```sh
Over 5 mins
esbmc --sol example.sol example.solast --incremental-bmc --no-standard-checks  1.90s user 0.19s system 64% cpu 3.255 total

Over 5 mins
esbmc --sol example.sol example.solast --contract Reproduction     4.13s user 0.20s system 80% cpu 5.384 total
```

![image](https://github.com/user-attachments/assets/f387cf4a-b3a6-4163-8aa7-d8594ce6bc95)

now the whole regression test can be finished in 120 second (-j 8)
---

This PR also contains some bug fixing, including library API
(_max/_min), address binding in trusted mode

---------

Co-authored-by: hejueyun2 <hejueyun@gmail.com>

[c++] added basic std::unordered_map support (#2530)

This PR introduces initial support for `std::unordered_map` in our C++
model, along with corresponding regression tests to validate its
correctness and error detection capabilities. The support includes a
simplified internal implementation suitable for bounded model checking,
and test cases to ensure expected behavior.

---------

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[c++] removed esbmc_forward_iterator_tag

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] added test cases for Python range

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

Consider the guard when dealing with sideeffects (#2514)

This is one of the known problems:

1. The current guard needs to be taken into account when dealing with
memory allocation, especially in if expressions.
2. There is something wrong with our realloc operation that causes out
of bound. This is because we only adjust the bound in the track new
pointer, while nothing changes in the dynamic object. I tried to modify
the symbol directly, but at the SMT level there was a bit width
mismatch.

Should we rethink the implementation of realloc, perhaps malloc and
memcpy would be a good approach instead?

[c++] added test case for vector

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[C++ verification] Add a new implementation of typeid (#2534)

The type of polymorphism needs to be fetched at runtime, which is not
handled by the frontend, so for now we skip it for preliminary support.

The TC in this PR reflects all currently supported methods.

[c++] fix vector default constructor: remove explicit keyword (#2535)

[regression] reduced verification time for insert2_fail

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] reduced verification time for emplace_fail

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[regression] added test cases for vector

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[c++] add allocator template parameter to std::vector (#2536)

Update main.cpp

[c++] applied coding style to vector

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[c++] add deterministic hash specializations for std::hash (#2538)

[python] added test case for range

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

Address incosistent behaviour in dump_smt function across solvers (#2524)

Updated the z3_convt::output_smt() and the bitwulza_convt::dump_smt()
functions to print
to stdout when no output was defined

Improved the handling of empty and "-" output paths in the
smtlib_conv::dump_smt() function

Addressed issue #2167

---------

Signed-off-by: mihaistate05 <mihaita.state@yahoo.com>
Signed-off-by: mihaistate <mihai.state03@yahoo.com>
Signed-off-by: mihaistate05 <mihai.state03@yahoo.com>
Co-authored-by: mihaistate05 <mihaita.state@yahoo.com>

[CI] improve auto commit (#2540)

Improve the code style check CI:

Only branches in the ESBMC repository will trigger the auto commit,
because git commit does not have permission to modify other
repositories.

Otherwise, we show the corresponding code, throw an error.

Update stats-300s.txt

Update stats-30s.txt

[c++] fixed typos in string

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[c++] fix namespace collision in functional header (#2541)

This PR replaces unqualified `std::` references with `::std::` to
resolve parsing errors where ESBMC incorrectly looks up standard library
features in `__shedskin__::std`
(https://github.com/shedskin/shedskin/blob/master/shedskin/lib/builtin/hash.hpp)
instead of the `global ::std` namespace.

````
ESBMC version 7.9.0 64-bit x86_64 linux
Target: 64-bit little-endian x86_64-unknown-linux with esbmclibc
Parsing main.cpp
In file included from main.cpp:1:
In file included from ./builtin.hpp:223:
In file included from ./builtin/hash.hpp:5:
/tmp/esbmc-cpp-headers-ba1b-0202-35ea/functional:50:50: error: no template named 'forward' in namespace '__shedskin__::std'; did you mean '::std::forward'?
  explicit callable_wrapper(Callable &&f) : func(std::forward<Callable>(f))
                                                 ^~~~~
/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/move.h:77:5: note: '::std::forward' declared here
    forward(typename std::remove_reference<_Tp>::type& __t) noexcept
    ^
In file included from main.cpp:1:
In file included from ./builtin.hpp:223:
In file included from ./builtin/hash.hpp:5:
/tmp/esbmc-cpp-headers-ba1b-0202-35ea/functional:50:50: error: no template named 'forward' in namespace '__shedskin__::std'; did you mean '::std::forward'?
  explicit callable_wrapper(Callable &&f) : func(std::forward<Callable>(f))
````

Signed-off-by: Lucas Cordeiro <lucasccordeiro@gmail.com>

[c++] added basic bitset operational model (#2543)

[python-frontend] Handling string attributes (#2546)

- Handle string attributes as char pointers;
- Append `'\0'` to char arrays to enable use of `strcmp` for string
comparisons.

---------

Co-authored-by: brcfarias <1334363+brcfarias@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant